py.test日志控制

jjh*_*jjh 30 python pytest

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

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

谢谢,强尼

hpk*_*k42 9

安装和使用pytest-capturelog插件可以满足您的大部分pytest/logging需求.如果缺少某些东西,你应该能够相对容易地实现它.

  • 您不需要任何插件,因为所有这些插件都已弃用,并且`该插件的功能已合并到 pytest 核心`,如此处所述 https://github.com/eisensheng/pytest-catchlog(Fork of `pytest-capturelog`) (3认同)

Aro*_*zon 9

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

def test_foo(caplog):
    caplog.setLevel(logging.INFO)
    pass
Run Code Online (Sandbox Code Playgroud)

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

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
Run Code Online (Sandbox Code Playgroud)

  • pytest-capturelog似乎没有维护并抛出警告.看起来有一个修复此问题的分支:https://pypi.python.org/pypi/pytest-catchlog/ (3认同)

dan*_*van 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
Run Code Online (Sandbox Code Playgroud)

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


Ala*_*aya 7

Pytest 现在通过固定装置对日志控制提供本机支持caplog;不需要插件。

您可以指定特定记录器的日志记录级别或默认根记录器的日志记录级别:

import pytest

def test_bar(caplog):
    caplog.set_level(logging.CRITICAL, logger='root.baz')
Run Code Online (Sandbox Code Playgroud)

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