首页 > 解决方案 > pytest:断言测试没有输出

问题描述

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

我已经阅读了 pytest捕获文档,并且可以在每个测试中使用该系统,但我希望避免在任何地方传递捕获夹具,以及修改所有测试。

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

标签: pythontestingpytest

解决方案


自动使用的夹具可以在拆卸时检查 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"

推荐阅读