测试覆盖率报告有啥用
写代码的时候,谁都不想上线后出 bug。跑完单元测试,光看“全部通过”可不够,你还得知道到底测了哪些代码,哪些地方没覆盖到。测试覆盖率报告就是干这个的——它告诉你哪些代码被执行过,哪些是“盲区”。
比如你写了个用户登录功能,测试只跑了正确密码的情况,忘了试错误密码或者空输入,这种遗漏覆盖率报告一眼就能看出来。
常用工具有哪些
不同语言有对应的工具,挑几个常见的说说。
Java:JaCoCo
在 Maven 项目里加个插件就行:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>执行 mvn test 后,报告会生成在 target/site/jacoco/ 目录下,打开 index.html 就能看到详细结果。
Python:coverage.py
先装包:pip install coverage,然后运行测试:
coverage run -m unittest discover
coverage html执行完会在当前目录生成一个 htmlcov 文件夹,点开里面的 index.html,每行代码有没有被覆盖都标得清清楚楚。
JavaScript:Istanbul(via Jest)
如果你用的是 Jest,直接加个参数就能出报告:
jest --coverageJest 默认用 Istanbul,运行后会在终端显示覆盖率摘要,同时生成 coverage 目录,里面有详细的 HTML 报告。
怎么看懂报告
打开 HTML 报告后,通常能看到四类数据:语句覆盖率、分支覆盖率、函数覆盖率、行覆盖率。重点关注红色标记的代码块,这些是没被测试触达的部分。
比如某个 if 判断只走了 true 分支,else 部分没走,就会标黄或红。这时候你就该补个测试用例了。
集成到日常开发
别等到上线前才看覆盖率。把生成报告的命令加到 CI 流程里,比如 GitHub Actions 或 Jenkins,每次提交代码自动跑一遍,还能设置最低阈值,低于 80% 就报错提醒。
这样团队成员随时都能看到质量状态,也不会因为忙就忽略测试完整性。