简介

目前我们在做单元测试管理平台。开发希望能比较直观地看到新增/修改代码的覆盖情况。
jacoco 原生是没有该功能的。所以为了统计增量覆盖率,写了这个脚本工具
这个工具是在 jacoco 的覆盖率报告基础上,计算出增量覆盖率,并且对 jacoco 的覆盖率报告做一些修改,方便看到哪些行是新增的。

github 地址

https://github.com/raoweijian/jacoco-diff

比较

在写这个工具之前,我看过一个类似的介绍: https://testerhome.com/topics/6196
但是看完还是感觉不知道怎么应用到我们目前的项目里。所以干脆自己写一个。

原理

首先明确一下我们的需求:

  1. 能跟指定版本进行对比,得到增量覆盖率数据。
  2. 在 jacoco 的覆盖率报告里,能清晰地标识出新增行。

为了实现第一点,首先要获取到哪些代码行是新增或者修改的。由于我们团队目前都用 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 需要处理的子模块 (如果指定的工程没有子模块,需要自行修改一些代码)


↙↙↙阅读原文可查看相关链接,并与作者交流