我有一个简单的测试:
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
为什么不简单地重定向所有输出,比如:
py.test test.py 2>&1 >/dev/null
这适用于任意cli应用程序的任何输出(stderr,stdout)。
@smassey的答案在大多数情况下都有效,但由于您从Python本身执行pytest,因此需要以不同的方式处理问题。
例如,在运行测试时,让python的stdout
和stderr
重定向为零。这可以通过以下代码实现:
#!/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.stdout
和sys.stderr
需要公开某些方法,这样print
就不会抛出异常。
还有一个问题:你为什么要这么做?