py.test日志控制

时间:2012-08-07 22:41:57

标签: python pytest

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

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

谢谢, 强尼

5 个答案:

答案 0 :(得分:9)

安装和使用pytest-capturelog plugin可以满足您的大多数pytest /日志记录需求。如果缺少某些东西,你应该能够相对容易地实现它。

答案 1 :(得分:9)

正如霍尔格所说,你可以使用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)

答案 2 :(得分: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

等... NB - -s标记非常重要,如果没有,py.test会过滤掉所有sys.stderr信息。

答案 3 :(得分:2)

Pytest现在具有通过caplog固定装置对日志记录控制的本地支持;不需要插件。

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

import pytest

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

Pytest还捕获caplog.records中的日志输出,因此您可以声明已记录的级别和消息。有关更多信息,请参见官方文档herehere

答案 4 :(得分:1)

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

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