31

我们最近切换到 py.test 进行 python 测试(顺便说一句,这太棒了)。但是,我试图弄清楚如何控制日志输出(即内置的python 日志模块)。我们安装了 pytest-capturelog,它按预期工作,当我们想查看日志时,我们可以通过 --nologcapture 选项。

但是,您如何控制日志记录级别(例如信息、调试等)以及过滤日志记录(如果您只对特定模块感兴趣)。py.test 是否有现有的插件来实现这一点,还是我们需要自己推出?

谢谢,乔尼

4

5 回答 5

10

Installing and using the pytest-capturelog plugin could satisfy most of your pytest/logging needs. If something is missing you should be able to implement it relatively easily.

于 2012-08-09T06:34:48.833 回答
10

正如 Holger 所说,您可以使用pytest-capturelog

def test_foo(caplog):
    caplog.setLevel(logging.INFO)
    pass

如果您不想使用 pytest-capturelog,您可以在日志配置中使用 stdout StreamHandler,以便 pytest 捕获日志输出。这是一个示例basicConfig

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
于 2014-05-20T19:25:30.180 回答
8

有点晚的贡献,但我可以推荐pytest-logging作为一个简单的插入式日志捕获解决方案。在pip install pytest-logging您可以控制日志的详细程度(显示在屏幕上)之后

$ py.test -s -v tests/your_test.py
$ py.test -s -vv tests/your_test.py
$ py.test -s -vvvv tests/your_test.py

等等... 注意 --s标志很重要,没有它py.test会过滤掉所有sys.stderr信息。

于 2016-08-08T16:08:27.920 回答
6

Pytest 现在原生支持通过caplog夹具进行日志记录控制;不需要插件。

您可以为特定记录器或默认情况下为根记录器指定日志记录级别:

import pytest

def test_bar(caplog):
    caplog.set_level(logging.CRITICAL, logger='root.baz')

Pytest 还捕获日志输出,caplog.records以便您可以断言记录的级别和消息。有关详细信息,请参阅此处此处的官方文档。

于 2019-01-20T21:50:34.737 回答
1

更晚一点的贡献:您可以尝试pytest-logger。该插件的新颖之处在于记录到文件系统:pytest 为每个测试项目提供 nodeid,可用于组织测试会话日志目录(借助 pytest tmpdir 工具及其测试用例开始/结束挂钩)。

您可以分别为终端和文件系统配置多个处理程序(带有级别),并提供自己的 cmdline 选项来过滤记录器/级别,以使其适用于您的特定测试环境 - 例如,默认情况下,您可以将全部记录到文件系统,将一小部分记录到终端,这--log如果需要,可以使用选项在每个会话的基础上进行更改。如果用户没有定义任何钩子,插件默认什么都不做。

于 2016-12-04T22:46:55.340 回答