目前我们在做单元测试管理平台。开发希望能比较直观地看到新增/修改代码的覆盖情况。
jacoco 原生是没有该功能的。所以为了统计增量覆盖率,写了这个脚本工具
这个工具是在 jacoco 的覆盖率报告基础上,计算出增量覆盖率,并且对 jacoco 的覆盖率报告做一些修改,方便看到哪些行是新增的。
https://github.com/raoweijian/jacoco-diff
在写这个工具之前,我看过一个类似的介绍: https://testerhome.com/topics/6196
但是看完还是感觉不知道怎么应用到我们目前的项目里。所以干脆自己写一个。
首先明确一下我们的需求:
为了实现第一点,首先要获取到哪些代码行是新增或者修改的。由于我们团队目前都用 git 管理代码,所以直接通过 git 去获取是比较方便的。
有一个库,实现了 python 和 git 的交互:https://github.com/gitpython-developers/GitPython
第二点,我采用的方案是在行首增加一个蓝色的钻石(风格与 jacoco 原生的黄色、红色、绿色钻石一致)。虽然含义与原生的钻石不相关,但是
看起来会比较自然。因为背景色是有其他含义的,所以不能使用背景色。思来想去还是感觉加个钻石比较合适。
具体的实现,是通过修改 css class,添加背景图案。具体可以看 github 上的源码。
新增的行首增加蓝色钻石标志,与其它钻石不冲突
# 假设工程路径为 ~/project/test_project
cd ~/project/test_project
# 执行单测,生成 jacoco 覆盖率报告
mvn clean test
# 使用本工具,计算增量覆盖率,并修改覆盖率报告
python main.py -d ~/project/test_project -m sub_module -o HEAD~1
-h, --help 打印帮助信息
-d, -dir 工程根目录
-o, -old_version 指定对比的版本号, 如果该参数没有给出,默认与前一个版本进行对比 (HEAD~1)。该参数支持 git commit hash 或者 HEAD~n 的格式。
-m, -module 需要处理的子模块 (如果指定的工程没有子模块,需要自行修改一些代码)