2016-08-02 68 views
1

是否有可能在pytest中更改一次测试的捕获行为 - 即在测试脚本内?更改一个测试的pytest捕获

我有一堆测试,我用pytest。在某些测试中,我喜欢打印几个有用数量,因此我使用-s标志在pytest输出中显示它们。但我也测试警告,这些警告也会被打印出来,并且看起来很丑陋和令人分心。我试过像往常一样使用warnings.simplefilter来不显示警告,但这似乎没有做任何事情。 (也许pytest黑客呢???)无论如何,我想要一些方法来安静的警告,但仍然检查他们提出,同时也能够看到从我的其他打印声明捕获的输出。有没有办法做到这一点 - 例如,通过改变捕获只是一个测试功能?

回答

1

我已经通过手动重定向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,如果其他打印报表不想要的。

2

随着pytest 3.X有一个easy way暂时禁用捕获(见约capsys.disabled()部分。

也有在pytest-warnings插件,它显示了一个专用的报告部分的警告。

+0

感谢您指出那些他们都看起来不错,我试着从github安装,但是它说'capsys'没有'disabled'属性,必须是相当出血的!:) – Mike

+0

'master'分支用于稳定版本,所以看看是什么[即将上市3.0](https://github.com/pytest-dev/pytest/blob/features/CHANGELOG.rst)(很多!),你需要使用'features'分支。 –

+0

啊,我明白了。谢谢。 – Mike