pytest-html报告为空的主因是pytest未执行用例,常见于测试文件名不符test_.py/_test.py规则或函数未以test_开头;需检查命名、加-v验证用例发现、排查其他插件干扰。

pytest-html 为什么生成的报告是空的
常见现象是运行完 pytest --html=report.html,打开页面只有标题栏和空表格,用例数显示 0。根本原因不是插件没装,而是 pytest 没真正执行到用例——比如测试文件名不符合 test_*.py 或 *_test.py 规则,或者用例函数没以 test_ 开头。
实操建议:
立即学习“Python免费学习笔记(深入)”;
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 确认测试文件在当前目录或子目录中,且命名合规(如
test_login.py) - 检查函数定义是否为
def test_something():,而非def check_something(): - 加
-v参数运行一次:pytest -v,看终端是否列出用例;没列出来,报告必然为空 - 如果用了
--base-url或--driver等其他插件参数,确保它们不引发提前退出(例如 selenium 驱动未安装时会报错中断)
如何让 pytest-html 显示日志和截图
默认情况下,pytest-html 只捕获标准输出(print)和异常 traceback,不会自动包含 logging 日志或浏览器截图——这两项对调试失败用例最关键。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 启用日志需在运行命令中加
--log-level=INFO和--capture=no(或--capture=tee),否则日志被截断不写入报告 - 截图要靠测试代码主动调用,比如在
except块里用driver.get_screenshot_as_file("screenshot.png"),再通过extra参数注入报告:from pytest_html import extras<br>def test_fail_with_screenshot():<br> try:<br> assert False<br> except AssertionError:<br> driver.save_screenshot("fail.png")<br> extra = [extras.image("fail.png")]<br> raise AssertionError().with_traceback(None).with_extra(extra) - 注意路径问题:生成的图片路径是相对于报告 HTML 文件的,推荐统一放在
reports/子目录下,并在extras.image()中写相对路径如"reports/fail.png"
中文乱码、样式错乱、JS 报错怎么修
打开报告页面后文字堆叠、按钮失效、控制台报 Uncaught ReferenceError: $ is not defined,大概率是本地网络无法加载 CDN 上的 jQuery 或 Bootstrap 资源,或者文件编码不对。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 强制使用离线资源:安装带内置依赖的版本
pip install pytest-html[offline],再运行时加--self-contained-html参数,所有 JS/CSS 打包进单个 HTML 文件 - 避免文件名含中文或空格,报告路径用纯英文,如
reports/test_report.html - 如果用 CI(如 Jenkins)生成报告,确认工作目录权限允许写入,且没有因路径过长导致部分资源写入失败(Windows 尤其敏感)
- 浏览器缓存旧版 JS?试试加时间戳参数强制刷新:
report.html?v=20240520
多环境报告合并与 timestamp 标记
每天跑一次 CI,但 report.html 总是被覆盖,历史记录全丢;或者想对比 dev/staging/prod 三套环境的同一组用例结果,得手动改文件名、整理目录。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用时间戳动态生成文件名:
pytest --html="reports/report_$(date +%Y%m%d_%H%M%S).html"(Linux/macOS)或pytest --html="reports\report_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.html"(Windows CMD) - 不要依赖
pytest-html自带的--json-report(它已废弃),改用pytest-json-report插件生成结构化 JSON,再用脚本合并分析 - 若需单页展示多环境结果,得自己写轻量聚合页:读取多个 HTML 的
<div class="summary"> 和 <code><table class="results-table"> 片段,拼成新页面——<code>pytest-html不支持原生合并真正麻烦的从来不是生成一页 HTML,而是让这页内容在两周后还能准确定位到那次失败的登录弹窗逻辑在哪一行代码、哪一次点击。截图路径、日志级别、文件命名规则,三个地方松动一个,回溯成本就翻倍。

















