pytest:断言测试没有输出

pytest: assert no output from tests

是否可以断言使用 pytest 的测试 运行 不会从 Python 或 C stdout 输出任何内容?理想情况下,这将是全局的,以及一些手动注释的排除项。

我已经阅读了 pytest capturing docs 并且可以在每个测试中使用该系统,但我希望避免在修改所有测试的同时到处传递捕获夹具。

(运行ning doctests 隐式检查了这一点,因为它根据每个示例行的预期检查输出,但我想在单元测试的任何意外输出上出错)

自动使用的夹具可以在拆卸时检查 capsys 的内容:

# in conftest.py
import pytest

@pytest.fixture(autouse=True)
def no_output(capsys):
    yield
    out, err = capsys.readouterr()
    if out or err:
        pytest.fail(f"output captured: {out + err}")

这仍将允许您的测试套件进行一些 明确地 期望输出的测试,因为到 no_output 固定装置处于拆卸状态时,capsys 将具有已经吃完了。

# test_example.py

def test_no_output():
    pass

def test_output_allowed(capsys):
    print("ok")
    out, err = capsys.readouterr()
    assert not err
    assert out == "ok\n"