py.test日志控制

问题描述:

我们最近已经切换到Python测试py.test(这是梦幻般的顺便说一句)。不过,我试图找出如何控制日志输出(即内置的python日志记录模块)。我们已经安装pytest-capturelog,并且按预期工作,当我们想要查看日志时,我们可以通过--nologcapture选项。但是,如何控制日志记录级别(例如,信息,调试等)并过滤日志记录(如果您只对特定模块感兴趣)。是否有现成的py.test插件来实现这一目标?还是我们需要推出自己的插件?py.test日志控制

感谢, 强尼

+0

pytest-capturelog似乎已被替换为https://pypi.python.org/pypi/pytest-catchlog/ 这是在下面的一些评论中提到的, pytest-capturelog。我要离开这个评论,希望它能更明显地看到,并让下一个人不要犯我的错误。 – cledoux 2017-06-06 20:54:26

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

+0

我刚刚用pytest 3.0.6试了一下。它工作正常,但吠声很多:/pytest_capturelog.py:171'pytest_runtest_makereport'钩子使用弃用的__multicall__参数 WC1无pytest_funcarg__caplog:使用“pytest_funcarg__”前缀声明fixtures不推荐使用,并安排在pytest 4.0中删除。请删除前缀,然后使用@ pytest.fixture修饰器。 ... – mark 2017-02-17 08:57:44

+1

看起来像是有一个解决此问题的分支:https://pypi.python.org/pypi/pytest-catchlog/ – 2017-03-03 10:40:08

正如霍尔格说,你可以使用pytest-capturelog

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

如果你不想使用pytest-capturelog你可以在你的日志记录配置使用标准输出StreamHandler所以pytest将捕获的日志输出。下面是一个例子basicConfig

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) 
+3

pytest-capturelog似乎没有维护并引发警告。看起来有一个解决此问题的分支:https://pypi.python.org/pypi/pytest-catchlog/ – 2017-03-03 10:40:22

后期贡献了一点,但我可以推荐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-logger。这个插件的新奇之处在于记录到文件系统:pytest为每个测试项目提供了nodeid,它可以用来组织测试会话日志目录(在pytest tmpdir工具的帮助下以及它的测试用例开始/结束钩子)。

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