Coverage.py:Python 代码覆盖率检测,一个库搞定

Coverage.py 在 GitHub 上已经拿到 3,386 Star 了。

它做的是 Python 代码覆盖率检测。你跑完测试,它告诉你有多少代码被执行过,哪些分支还没走到。Python 标准库里自带的代码分析工具和追踪钩子,就是它的底层引擎。

不用它,你缺的是什么

写过 Python 测试的人迟早会遇到这个问题:测试全绿了,但心里没底。

测试覆盖率不等于代码质量,但覆盖率数字能告诉你测试到底测了多少东西。如果没有覆盖率工具,你只能凭感觉判断——那行新代码到底被测试跑到没有?那个异常分支是测试了还是忘了?

Coverage.py 给出的报告一目了然:每个文件、每行代码的执行状态,百分比一清二楚。

支持哪些 Python 版本

项目支持的 Python 版本覆盖了当前主流选择:

  • Python 3.10 到 3.15 beta,包括 free-threading 模式
  • PyPy3 3.10 和 3.11

也就是说,无论你用 CPython 的主线版本还是 PyPy,都能用上。

怎么用

Coverage.py 的用法很直接。安装:

pip install coverage

跑测试并收集覆盖率:

coverage run -m pytest

查看报告:

coverage report

生成 HTML 格式的详细报告:

coverage html

HTML 报告会在浏览器里打开,每个源文件的高亮版本,哪行执行了、哪行没执行,颜色区分,一眼看懂。

正文顶部截图

比你想的更深一点

Coverage.py 做的不是简单的行号记录。它利用 Python 标准库的 trace 模块和 AST 分析工具,能精确识别哪些行是真正可执行的代码,哪些是注释或空行。

这意味着它的报告不会把空行算作「未覆盖」,也不会漏掉分支。它还支持分支覆盖率测量(branch coverage),告诉你 if/else 的两个分支是否都走到了。

企业级使用也考虑到了,通过 Tidelift 可以提供商业级的支持和安全响应。

README区域截图

适合谁用

  • 用 pytest、unittest 跑测试的 Python 开发者
  • 在 CI 流程中需要卡覆盖率阈值的团队
  • 维护开源库,想给贡献者提供测试覆盖指引的维护者

st 跑测试的 Python 开发者

  • 在 CI 流程中需要卡覆盖率阈值的团队
  • 维护开源库,想给贡献者提供测试覆盖指引的维护者

更多推荐