如何在测试click cli的时候验证python.logging产生的log

在测试使用click构建的CLI时,发现logging.info无法在unittest中被捕获。原因是logging默认级别高于warn,调整为INFO后,log在命令执行时直接输出,而CliRunner并未记录。解决方案是在invoke内部配置logging,使StreamHandler使用被invoke覆盖后的sys.stderr,从而在测试中正确获取log输出。
摘要由CSDN通过智能技术生成

问题描述

这几天遇到了一个比较有趣的问题。我们组里有一个用click写的cli。我在给它写unittest。从click的文档上看,我可以使用CliRunner的invoke()这个方法。cli代码示例

@click.command()
@click.argument("name")
def hello(name):
    click.echo(f"Hello {name}!")
    logging.info("I am doing some logging")


def test_hello_world():
    runner = CliRunner()
    result = runner.invoke(hello, ["Peter"])
    print("Output is: " + result.output)

这是一个最简单的例子。我们在cli里就只用click.echo打印一个字符串,然后用logging.info打印一条log。这里是输出:

Output is: Hello Peter!

我们发现,log的内容并没有显示出来。通过查询手册,这个问题很快就得到了解决。这个问题的原因是logging的默认级别是warn及以上。所以info的级别比warn的级别低,所以没有被显示。那没有问题,我们修改一下我们的code,修改后的代码如下:

# Set log level to INFO
logging.basicConfig(level=logging.INFO)

@click.command()
@click.argument("name")
def hello(name)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值