pytest 运行时如何实时显示 print 输出?

pytest 默认捕获 print 输出只在失败时显示。加 -s 参数(--capture=no)即可实时显示所有 print。本文介绍输出捕获机制及相关参数。

最佳实践
pytest 运行时如何实时显示 print 输出?封面

-s 参数:pytest -s。pytest 默认捕获所有 print/logging 输出(只在用例失败时展示),-s 关闭捕获,输出实时显示在终端。

基本用法

pytest -s
pytest tests/test_api.py -s -v

-s--capture=no 的简写。

为什么不显示输出

pytest 的捕获机制(capture)默认拦截 stdout/stderr/logging:

  • 好处:测试输出干净,几百个用例跑完只看结果汇总;
  • 失败时:捕获的输出会附在失败报告里,帮助定位问题;
  • 调试时:加 -s 实时看输出。

相关参数

pytest --show-capture=no   # 失败时也不展示捕获的输出
pytest -s                  # 完全不捕获,实时输出
pytest -q                  # 简洁模式,配合 -s 输出更清晰

注意:-s 与 pdb 调试

进入 pdb 调试(breakpoint()--pdb)时 pytest 会自动临时关闭捕获,所以调试时不需要手动加 -s

常见问题(FAQ)

Q:-s 后 logging 输出也显示吗?
A:print 实时显示;logging 的输出还受 pytest 的 log capture 控制,默认级别 WARNING。想看到 INFO/DEBUG 日志,加 --log-cli-level=INFO

Q:想看日志但不想关捕获?
A:用 --log-cli-level=DEBUG 开启实时日志输出,print 仍被捕获——两种机制互不影响。

Q:并行(pytest-xdist)时 -s 有效吗?
A:有效,但多个 worker 的输出会交错,调试时建议先单进程跑。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台