当前位置: 首页 > 科技迭代

如何在pytest中显示Python的logging日志

时间:2024-02-17 22:07:26 科技迭代

如果你的代码使用了Python的logging模块来记录日志信息,那么你可能会遇到一个问题:当你使用pytest来运行测试用例时,你的日志信息并没有显示在控制台上。这是为什么呢?本文的目的就是告知读者如何在使用pytest时显示日志信息。


logging模块简介


logging模块是Python标准库中提供的一个用于记录日志信息的模块。它可以让你在代码中添加不同级别的日志信息,如debug, info, warning, error, critical等。这些日志信息可以输出到控制台,也可以输出到文件或其他地方。logging模块的优点是它可以让你灵活地控制日志信息的格式,过滤,处理等,而不需要修改代码中的print语句。


pytest是一个流行的Python测试框架,它可以让你轻松地编写和运行测试用例。pytest的特点是它可以自动发现和执行测试用例,支持参数化,fixture,断言等功能,以及提供丰富的插件和扩展。pytest还可以和其他测试工具,如mock, coverage, tox等集成,提高测试的效率和质量。


pytest和logging模块的冲突


那么,为什么在使用pytest时,logging模块的日志信息没有显示在控制台上呢?这是因为pytest和logging模块有一些冲突。具体来说,有以下几个原因:


pytest会自动捕获标准输出和标准错误,以便在测试失败时显示更多的信息。这意味着如果你的日志信息是输出到标准输出或标准错误的,那么pytest会拦截它们,而不是显示在控制台上。


pytest会自动设置一个默认的logging配置,它会覆盖你的代码中的logging配置。这意味着如果你的代码中设置了不同的日志级别,格式,处理器等,那么pytest会忽略它们,而使用它自己的配置。


pytest的默认logging配置是只显示warning级别以上的日志信息,而且只在测试失败时显示。这意味着如果你的日志信息是debug或info级别的,那么pytest会过滤掉它们,即使测试失败了,也不一定会显示。


pytest的logging配置


那么,如何解决pytest和logging模块的冲突呢?幸运的是,pytest提供了一些选项和插件来让你自定义logging配置,以便在使用pytest时显示日志信息。具体来说,有以下几种方法:


使用-s或--capture=no选项来禁用pytest的标准输出和标准错误捕获,这样你的日志信息就可以直接输出到控制台了。例如,你可以运行pytest -s test.py来执行你的测试用例。


使用-o或--override-ini选项来覆盖pytest的默认logging配置,这样你可以指定你想要的日志级别,格式,处理器等。例如,你可以运行pytest -o log_cli=true -o log_level=DEBUG test.py来启用控制台日志,以及设置日志级别为DEBUG。


使用pytest.ini文件来存储你的logging配置,这样你就不需要每次运行pytest时都指定选项了。例如,你可以在你的项目根目录下创建一个pytest.ini文件,内容如下:


使用pytest-capturelog插件来捕获和显示logging模块的日志信息,这样你可以在测试报告中看到你的日志信息,而不是只在控制台上。例如,你可以安装pytest-capturelog插件,然后运行pytest --capturelog test.py来执行你的测试用例。