繁体   English   中英

py.test日志控制

[英]py.test logging control

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

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

谢谢,强尼

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

正如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)

这是一个晚期的贡献,但我可以推荐pytest-logging用于简单的嵌入式日志记录捕获解决方案。 pip install 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

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

Pytest现在通过caplog fixture caplog支持日志控制; 不需要插件。

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

import pytest

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

Pytest还捕获日志输出caplog.records这样你就可以断言记录的水平和消息。 有关详细信息,请参阅此处此处的官方文档。

稍后的贡献:你可以试试pytest-logger 这个插件的新颖性是记录到文件系统:pytest为每个测试项提供nodeid,可以用来组织测试会话日志目录(借助pytest tmpdir工具和它的testcase开始/结束挂钩)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM