pytest --html=report.html 没反应是因为插件未被 pytest 加载,需先运行 pip show pytest-html 验证安装,并用 pytest --help | grep html 确认插件已识别;常见原因是虚拟环境未激活或 pip 与 pytest 环境不一致。

安装 pytest-html 插件后为什么 pytest --html=report.html 没反应?
因为 pytest-html 默认不启用,必须显式安装且确保 pytest 能识别插件。常见错误是只运行了 pip install pytest-html 却没验证是否生效。
- 先确认安装成功:
pip show pytest-html,输出应含Version:和Location: - 再检查插件是否被 pytest 加载:
pytest --help | grep html,能看到--html=FILE和--self-contained-html等选项才算正常 - 如果无输出,可能是虚拟环境没激活,或 pip 与 pytest 不在同个 Python 环境(比如用系统 pip 装,却用 pyenv 的 pytest)
生成带样式和截图的 HTML 报告要加哪些关键参数?
默认生成的 report.html 是基础版,没内联 CSS、没失败截图、时间戳也不直观——这些都得靠参数补全。
-
--html=report.html:指定输出路径,支持相对/绝对路径 -
--self-contained-html:把 CSS、JS 打包进单个 HTML 文件,方便离线查看或邮件发送 -
--capture=no或-s:避免 stdout/stderr 被截断,确保日志完整写入报告 - 若需截图(如 Selenium 测试失败时),需在测试代码里手动调用
driver.get_screenshot_as_file(),并用pytest_html.extras.image()注入报告,不是插件自动做的
测试失败时报告里显示的 traceback 为什么被截断?
pytest 默认会折叠长 traceback,而 pytest-html 直接复用 pytest 的输出格式,所以看起来“信息不全”。这不是插件 bug,而是 pytest 的行为。
- 加
--tb=short(默认)、--tb=long或--tb=plain可控制 traceback 格式;推荐--tb=short配合--html,平衡可读性与体积 - 若想看完整异常链(比如
raise ... from场景),必须用--tb=long,否则嵌套异常会被省略 - 注意:加
--verbose(即-v)能让测试名更详细,但不会影响 traceback 截断逻辑
如何让报告按日期命名并自动覆盖旧文件?
pytest-html 不提供内置的时间戳模板,也不能自动清理旧报告——得靠 shell 命令或 Python 脚本组合实现。
立即学习“Python免费学习笔记(深入)”;
- Linux/macOS 下常用:
pytest --html="report_$(date +%Y%m%d_%H%M%S).html" --self-contained-html - Windows CMD 下:
pytest --html="report_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.html" --self-contained-html(注意空格和冒号处理) - 更稳妥的做法是写个
run_tests.py,用datetime.now().strftime()生成文件名,再调用subprocess.run()执行 pytest 命令 - 别依赖
--html=report.html自动覆盖——它只是写入,不会提醒你旧报告还躺在目录里



















