我们最近切换到py.test进行python测试(这是非常棒的btw)。但是,我正在试图弄清楚如何控制日志输出(即内置的python日志记录模块)。我们安装了pytest-capturelog,这可以按预期工作,当我们想查看日志时,我们可以通过--nologcapture选项。
但是,如何控制日志记录级别(例如信息,调试等)并过滤日志记录(如果您只对特定模块感兴趣)。是否有py.test的现有插件来实现这一点,还是我们需要自己动手?
谢谢, 强尼
答案 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
中的日志输出,因此您可以声明已记录的级别和消息。有关更多信息,请参见官方文档here和here。
答案 4 :(得分:1)
稍后的贡献:你可以尝试pytest-logger。此插件的新颖性是记录到文件系统:pytest为每个测试项提供nodeid,可用于组织测试会话日志目录(借助pytest tmpdir工具及其测试用例的开始/结束挂钩)。
您可以分别为终端和文件系统配置多个处理程序(具有级别),并提供自己的cmdline选项以过滤记录器/级别,使其适用于您的特定测试环境 - 例如默认情况下,您可以将所有文件系统和小部分记录到终端,如果需要,可以使用--log
选项按会话更改。如果用户没有定义钩子,插件默认不执行任何操作。