开源测试工具 jacoco 增量覆盖率计算工具

raoweijian · July 18, 2018 · Last by 第一号伤心人 replied at June 13, 2019 · 6314 hits

简介

目前我们在做单元测试管理平台。开发希望能比较直观地看到新增/修改代码的覆盖情况。
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 需要处理的子模块(如果指定的工程没有子模块,需要自行修改一些代码)

共收到 12 条回复 时间 点赞

写了个类似的东西用在精准测试上😁https://github.com/AngryTester/jacoco

AngryTester 回复

看来增量覆盖率是刚需

不错不错,需要这,感谢楼主开源精神

飞狐 回复

多谢支持😁

Author only

diff.git乱码了,麻烦楼主更新下。

AngryTester 回复

你统计了如果是独立以jar包引入的sdk的覆盖率了吗?

Author only

感谢楼主分享,这种统计增量数据好处理吗?除了增量行覆盖率根据报告可以计算出,增量分支和方法等纬度的覆盖率好计算吗?

10Floor has been deleted

请问楼主,最终的结果,只会留下过滤之后的新增文件吗?

大豆子 4年 半的个人测试经历 中提及了此贴 14 Mar 14:47
AngryTester 回复

我试了试,前面的操作步骤都正常,到最后生成的增量报告里没有数据呢?能把步骤写的在详细些吗?

jack 回复

你用楼主的jacoco-diff 正常了吗?我一运行就报错~Q1175426782

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up