pytest-sugar:让 pytest 测试输出清爽起来

0 阅读3分钟

pytest-sugar:让 pytest 测试输出清爽起来

用 pytest 的人都知道一件事:默认的测试输出看起来太累了。跑几百条用例时,屏幕刷满密密麻麻的点号和缩写,哪个用例挂了、报了什么错,得来回翻半天。尤其是加了参数化测试后,一条测试变十条,输出量翻倍,定位问题就更费劲了。pytest-sugar 这个插件就是来解决这个痛点的,它在 GitHub 上有 1,529 个 Star,做的事情简单直接:把 pytest 的输出变得好看、易读。

正文顶部截图

不止是一条进度条

装上 pytest-sugar 之后,pytest 的输出会多出一条实时进度条,每条测试的名称按顺序显示,通过的标绿,失败的标红,跳过的标黄。跑长测试集时,进度条一边推进一边打印用例名,你能看到当前在测哪个函数、还剩多少没跑完,不用一直盯着屏幕等结果。

失败展示也做了改进。默认 pytest 的错误信息是一行摘要,想看完整堆栈得手动加参数。pytest-sugar 默认就展开详细报错,省去了加 -v--tb=long 的步骤。哪个测试挂了、挂在哪一行、抛了什么异常,一眼就能看到。排查效率比翻原版输出高出一截。

README区域截图

安装简单,零配置上手

pip 一行命令装完就能用:

python -m pip install pytest-sugar

装好之后直接跑 pytest,输出自动变样,不需要改任何配置文件。插件通过 pytest 的 entry point 机制注册,安装即激活,对已有项目零侵入。如果团队里有人装了有人没装,也不影响测试结果本身,只是个前端展示层的差异。

如果遇到 CI 环境没检测到终端导致美化效果丢失,加 --force-sugar 强制启用即可。想临时切回原版输出,用 pytest -p no:sugar 就行,不会影响其他插件的运行。verbose 模式下输出会更详细,每条测试一行,适合需要精确定位的时候。

和 Playwright 的联动

pytest-sugar 内置了对 Playwright trace 的支持。跑 E2E 测试时,如果某个用例挂了,它会自动检测 Playwright 生成的 trace 文件,在测试结果里提示文件路径。开发者不用手动去找 trace 目录,省了一步操作。

相关参数有两个:--sugar-trace-dir 指定 trace 文件存放目录,默认是 Playwright 的 test-results--sugar-no-trace 关闭这个功能。写前端自动化测试时这两个参数会经常用到。

适用场景

这个插件适合所有用 pytest 的项目,本地开发和 CI 流水线都能用。开发时进度条让你实时感知测试进度;CI 里强制输出美化结果后,排查失败用例的效率明显比原版输出高。

依赖方面,它要求 Python 3.10 以上和 pytest 7 以上。如果项目还在用老版本 Python 可能需要先升级,不过现在主流项目基本都满足。除了这两个没有其他额外依赖,安装体积小,不拖累 CI 构建时间。项目从 2016 年就开始维护了,一直有更新,不用担心突然停更。

它还提供了一个 fake tests 的示例目录,clone 下来跑一遍 pytest faketests 就能看到插件的完整效果,适合想先试试看再决定是否引入的人。

同类工具对比

pytest 美化类插件还有几个选择:pytest-rich 基于 Rich 库做了一套完整的彩色输出界面,pytest-pretty 专注改进断言输出的格式。pytest-sugar 的定位比它们更轻量,只改动测试结果的展示层,不引入额外的 UI 框架依赖。如果你只想要一个干净的进度条和直观的错误展示,它刚好够用。

pytest-sugar 做的事情不多,但正好打在痛点上了。写测试本身已经够花时间的了,至少让看结果的体验轻松一点。