pytest-cov需单独安装,安装后通过pytest --help | grep cov验证;基本命令为pytest --cov=my_module tests/,可生成终端或HTML覆盖率报告;建议用.coveragerc配置source、omit和exclude_lines以提高准确性。

安装 pytest-cov 并确认是否生效
pytest-cov 是一个插件,不是 pytest 自带功能,必须显式安装。不装它,加 --cov 参数会直接报错:ERROR: unknown option: --cov。
- 运行
pip install pytest-cov(推荐用虚拟环境,避免污染全局) - 安装后执行
pytest --help | grep cov,能看到--cov、--cov-report等选项才说明装对了 - 注意:如果你用的是 Poetry 或 Pipenv,得确保在激活环境中运行安装命令,否则 pytest 可能找不到插件
最简命令跑出覆盖率报告
不需要配置文件也能快速出结果,适合临时验证或 CI 单次检查。
- 基本命令:
pytest --cov=my_module tests/
其中my_module是你要统计的源码包名(对应目录名),不是文件路径,也不是.py后缀 - 如果源码在
src/下(常见于现代 Python 项目结构),要写成--cov=src.my_module,否则会显示 “No data was collected” - 默认输出是终端 summary(如
123 statements 94% covered),想看更细的行级覆盖,加--cov-report=term-missing
生成 HTML 报告并定位未覆盖代码
HTML 报告能直观看到哪行没执行,比终端数字有用得多,尤其调试分支逻辑时。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 加参数:
pytest --cov=my_module --cov-report=html tests/ - 执行完会在当前目录生成
htmlcov/文件夹,打开htmlcov/index.html即可浏览 - 注意点:
-
htmlcov/是默认输出目录,可改用--cov-report=html:reports/htmlcov指定路径 - 如果报告里全是灰色(0%),大概率是
--cov=xxx的模块名和实际 import 路径不一致,比如你写了--cov=utils,但测试里是from src.utils import foo,就得改成--cov=src.utils - HTML 报告不自动打开浏览器,需要手动点开,别等它弹窗
-
忽略测试文件和空行以避免干扰判断
默认情况下,pytest-cov 会把 tests/ 目录也纳入扫描(如果它被 import 过),导致覆盖率虚高;空行、docstring、pass 行也会计入“statements”,拉低数值。
立即学习“Python免费学习笔记(深入)”;
- 推荐建一个
.coveragerc文件放在项目根目录:[run] source = my_module omit = */tests/*,*/test_*.py,*/__pycache__/* exclude_lines = pragma: no cover def __repr__ raise AssertionError raise NotImplementedError
-
source显式限定只统计目标模块,比--cov=xxx更可靠 -
omit防止测试文件被误算;注意路径通配符用的是 Unix 风格,Windows 下也一样写<em>/tests/</em> -
exclude_lines里的正则会跳过匹配行,不参与统计——这对写了很多raise NotImplementedError的抽象基类特别有用
覆盖率数字本身容易误导人,真正关键的是:没覆盖的那些行,是不是业务逻辑的关键分支?有没有漏掉异常路径?别盯着 100% 看,先确保 if/else、try/except、边界值都进了测试。

















