我有简单的测试:
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
答案 0 :(得分:3)
为什么不简单地重定向所有输出,如下所示:
py.test test.py 2>&1 >/dev/null
这适用于任何 cli app的任何输出(stderr,stdout)。
答案 1 :(得分:3)
@ 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
不会抛出异常。
还有一个问题:你为什么要这样做?