pytest --cov默认不生成html报告,需显式添加--cov-report html参数;要指定包覆盖率须用--cov=my_package并配合.coveragerc配置source和omit规则;coverage.py是底层引擎,可直接通过coverage run -m pytest等命令调用。

pytest-cov安装后为什么pytest --cov不输出HTML报告?
默认情况下,pytest-cov只在终端打印简略的覆盖率统计(如文件名、行覆盖率百分比),不会自动生成HTML报告。必须显式启用HTML输出并指定路径。
- 加
--cov-report html才生成htmlcov/目录 - 想把报告放在特定位置,用
--cov-report html:/path/to/report - 如果同时用了
--cov-report term-missing,终端会显示缺失行号,但不影响HTML生成 - 注意:
htmlcov/是默认输出目录,若该目录已存在,会被直接覆盖,不会合并历史数据
如何只统计指定包或模块的覆盖率,避免测试代码和第三方库干扰?
不加过滤时,pytest-cov可能把tests/目录或venv/里的代码也纳入统计,导致覆盖率虚高或报错。
- 用
--cov=my_package限定目标模块(my_package需在Python路径中可导入) - 配合
--cov-branch开启分支覆盖率,更严格地反映逻辑路径覆盖情况 - 通过
--cov-config=.coveragerc把配置外提,避免命令行过长;典型.coveragerc内容:
[run] source = my_package omit = */tests/*,*/test_*.py,*/migrations/*
其中omit能排除测试文件和迁移脚本等非业务代码。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
Coverage.py与pytest-cov的关系:能不能不用pytest直接跑覆盖率?
pytest-cov只是Coverage.py的封装,底层全靠coverage命令驱动。这意味着你可以绕过pytest单独使用:
-
coverage run -m pytest等价于pytest --cov,但更灵活(比如后续可复用coverage命令) -
coverage report -m查看带缺失行号的文本报告 -
coverage debug sys查看实际监控的文件路径,排查“为什么某模块没被统计”这类问题 - 注意:
coverage run执行时若未加载目标模块(比如import失败),对应文件不会出现在报告里——不是bug,是Coverage本身没看到它被执行
HTML报告打开后显示“No data to display”或部分文件灰色不可点
这通常不是权限或路径问题,而是Coverage没收集到对应源码的执行痕迹。
- 检查是否漏写了
--cov=xxx参数,或source路径拼写错误(比如大小写、下划线不符) - 确认测试真正import并调用了目标模块——如果测试只mock了函数,实际代码没运行,Coverage自然记不到
- 虚拟环境路径污染:若
pip install -e .没执行,或安装的是旧版本包,coverage可能在site-packages里找源码,而那里只有字节码 - Windows下路径分隔符偶尔引发匹配失败,建议在
.coveragerc中统一用正斜杠/或双反斜杠\
最稳的方式是先跑一次coverage debug tracer,确认tracer是否启动;再看.coverage文件里有没有你关心的.py路径——没有就说明根本没进入采集流程。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










