是否可以在完全静默的情况下运行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

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

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

这适用于任意cli应用程序的任何输出(stderr,stdout)。

@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就不会抛出异常。

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

最新更新