为一项测试更改 pytest 捕获
Posted
技术标签:
【中文标题】为一项测试更改 pytest 捕获【英文标题】:Change pytest capturing for one test 【发布时间】:2016-12-08 09:39:28 【问题描述】:是否可以仅针对一项测试(即在测试脚本中)更改 pytest 中的捕获行为?
我有一堆与pytest
一起使用的测试。在一些测试中我喜欢打印几个有用的数量,所以我使用-s
标志在pytest
输出中显示它们。但我也测试了警告,这些警告也会被打印出来,看起来很丑陋和分散注意力。我已经尝试像往常一样使用warnings.simplefilter
来不显示警告,但这似乎没有任何作用。 (也许pytest
破解它???)无论如何,我想要一些方法来消除警告,但仍然检查它们是否被引发,同时还能够从我的其他打印语句中看到捕获的输出。有什么方法可以做到这一点 - 例如,仅更改一个测试函数的捕获?
【问题讨论】:
【参考方案1】:在 pytest 3.x 中,有一个 easy way 可以暂时禁用捕获(请参阅有关 capsys.disabled()
的部分。
还有pytest-warnings 插件,它在专门的报告部分显示警告。
【讨论】:
感谢您指出这些;他们看起来都很棒。我尝试从 github 安装,但它说capsys
没有 disabled
属性。一定很前卫! :)
master
分支用于稳定版本,因此要查看upcoming in 3.0(很多!)您需要使用features
分支。
啊,我明白了。谢谢。【参考方案2】:
我已经通过手动重定向stderr
:
import os
import sys
import warnings
import pytest
def test():
stderr = sys.stderr
sys.stderr = open(os.devnull, 'w')
with pytest.warns(UserWarning):
warnings.warn("Warning!", UserWarning)
sys.stderr = stderr
如果不需要其他打印语句,我可以类似地将 stdout
重定向到 devnull。
【讨论】:
以上是关于为一项测试更改 pytest 捕获的主要内容,如果未能解决你的问题,请参考以下文章