pytest中print仅在quit()前可输出的原因及正确打印stdout的方法
现象原因
pytest默认开启了标准输出/标准错误的捕获机制,测试运行过程中所有print输出的内容会被暂时缓存,不会直接输出到控制台。只有当测试用例执行失败时,pytest才会把对应用例捕获到的输出内容打印出来,方便定位问题。
你在测试代码中添加quit()后会触发未捕获的SystemExit异常,pytest会判定该测试用例执行失败,因此自动把之前缓存的print内容输出到控制台,同时抛出异常提示。
正常打印的实现方法
你可以通过以下几种方式实现正常打印stdout内容:
- 运行测试时添加
-s参数,直接关闭pytest的全局输出捕获机制,所有内容会实时输出到控制台:pytest 你的测试文件名.py -s - 如果你希望只查看测试通过的用例的输出,不想关闭全局捕获,可以加
-rP参数,测试跑完后会统一打印所有执行成功的用例的输出:pytest 你的测试文件名.py -rP - 如果要做全局配置,不需要每次运行都加参数,可以在项目根目录的
pytest.ini配置文件中添加如下内容:[pytest]
addopts = -s - 如果你只需要特定位置的内容强制输出,不想修改全局配置,可以借助pytest的
capsysfixture手动操作输出:class TestModule: def test_print(self, capsys): print("test") # 手动读取捕获的内容并打印 captured = capsys.readouterr() print(captured.out, end="")
内容的提问来源于stack exchange,提问作者Yes
相关产品推荐
相关产品推荐

