有可能完全沉默运行pytest吗?

时间:2014-10-01 12:52:53

标签: python pytest

我有简单的测试:

def test_noindex(data):
    assert 0

我需要通过py.test来处理这个测试,但是完全无声(因为我看到py.test的失败测试有退出代码1)。

我试过了:

py.test -s test.py
py.test -qq test.py
py.test --capture=no test.py

结果总是一样的:我看到完整的报告。我做错了什么?

P.S。在Windows上运行,在python代码中使用pytest.main([params])执行pytest

2 个答案:

答案 0 :(得分:3)

为什么不简单地重定向所有输出,如下所示:

py.test test.py 2>&1 >/dev/null

这适用于任何 cli app的任何输出(stderr,stdout)。

答案 1 :(得分:3)

@ smassey的答案适用于大多数情况,但是既然你从Python本身执行pytest,你需要以不同的方式处理。

例如,在运行测试时,让python的stdoutstderr重定向到空。这可以通过以下代码完成:

#!/usr/bin/python
import os
import sys

old_out = sys.stdout
old_err = sys.stderr
sys.stdout = open(os.devnull, 'w')
sys.stderr = open(os.devnull, 'w')

print 'suppressed'

sys.stdout = old_out
sys.stderr = old_err

print 'restored'

open(os.devnull)打开您的操作系统相当于/dev/null的写作。将其重定向到None将不起作用,因为sys.stdoutsys.stderr需要公开某些方法,以便print不会抛出异常。

还有一个问题:你为什么要这样做?