测试开发之单元测试-实现Git增量代码的Jacoco覆盖率统计

原创
📘
陈琦
2023-05-25 10:33:53
5457
摘要:与大家分享,如何使用Jacoco集合Git来做增量代码的覆盖率测试,以及它实现的基本原理。
今天我们给大家分享,如何使用Jacoco集合Git来做增量代码的覆盖率测试。实现的基本原理是:
  • 使用Git的diff指令,计算出两个版本的差异;
  • 改造Jacoco源代码,只针对增量代码生成报告。

基本的功能滴滴的super-jacoco项目已经实现,并把它分装成了一个服务。大家可以基于这个开源项目进行二次开发,本文我们给大家介绍它的工作方式。

1、从官网下载、安装Oracle Java SDK。执行java -version,可输出版本信息表示安装成功。笔者这里安装的是JDK 11;

2、从这里下载解压Apache Maven构建工具3.9.1版,并将其加入系统PATH环境变量。成功后执行mvn -v,可正确返回版本信息;

3、安装、启动MySQL数据库,可以从这里下载免费的社区版;
4、执行Git克隆命令,获取项目源代码;

git clone https://github.com/didi/super-jacoco.git
5、打开项目src/main/resources目录下的application.properties文件,修改MySQL数据库连接地址、账号和密码;
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/super-jacoco?useUnicode=true&characterEncoding=utf8
spring.datasource.username=user
spring.datasource.password=P2ssw0rd
6、执行maven命令,编译jar包;

mvn package -Dmaven.test.skip=true
7、启动编译好的服务jar包;

java -jar super-jacoco.jar
8、如果是使用的IDE,可通过右键CodeCovApplication.java文件启动服务;

9、服务启动成功后,会执行一个定时任务来扫描数据库,以查找是否有覆盖率统计的任务需要执行,日志类似下图;


10、使用PostMan或命令行工具,发送“新建覆盖率统计任务”的请求。请确保参数uuid唯一,成功后返回code 200;

地址:http://127.0.0.1:8899/cov/triggerUnitCover
方法:POST
数据:
    {
        "uuid": "uuid001",
        "type": 1,
        "gitUrl": "https://gitee.com/ngtesting/ci_test_jcoco.git",
        "subModule": "",
        "baseVersion": "v1",
        "nowVersion": "v2",
        "envType": "-Ptest"
    }

11、稍等片刻,会发现控制台中有发现并执行任务的日志;

12、任务执行完成后,发送“获取覆盖率报告”的请求到服务;

13、在浏览器中打开返回的报告地址,得到以下页面。

14、此处为撰写本文时,可成功运行的被测项目。具体介绍可参考上一篇文章
15、有关super-jacoco中增量覆盖扫描的实现机制,可以参考jacoco增量覆盖率实践》这篇博客阅读相应章节代码。


Q: 如何实现Git增量代码的Jacoco覆盖率统计?

A: 通过使用Git的diff指令计算代码差异,并改造Jacoco以仅生成增量代码的覆盖率报告。


Q: 哪个开源项目已经实现了增量代码覆盖率统计功能?

A: super-jacoco项目已经实现了增量代码覆盖率统计功能。


Q: 如何启动super-jacoco服务并触发覆盖率统计任务?

A: 通过执行java -jar命令启动服务,并使用PostMan或命令行工具发送请求以触发任务。

  • Jacoco9.png
评论列表
🎷
沉着的自行车2025-12-07 09:34:26回复
增量覆盖率的实现挺有趣,值得尝试!

推荐阅读

测试开发之系统篇-按需创建测试虚拟机

首先,我们来了解一下KVM虚拟机有关的几个概念和工具。 kvm:基于内核的虚拟机(引擎) qemu:用于模拟虚拟机IO设备 qemu-img:虚拟机磁盘管理工具 libvirt:虚拟化服务的API接口 virsh:基于libvirt实现的命令行工具 qemu-manager:图形化管理工具 新建KVM虚拟机时,可以指定另一磁盘文件作为BackingFi...
aaronchen2k 2021-06-21

测试开发之单元测试-禅道结合ZTF驱动单元测试执行

ZTF和市面上已有的自动化测试工具相比,更聚焦于自动化测试的管理功能,包括脚本的组织和调度、同测试管理系统的集成等。使用ZTF驱动组织的自动化或单元测试工作,可一改以前自动化测试同研发管理系统相割裂的情况。
📘
陈琦
2023-05-26

测试开发之源码篇-代码分支策略

本文介绍了常见的代码分支策略,包括主干开发、Git Flow、Github Flow和Gitlab Flow。每种策略都有其适用场景和优势,可以根据项目需求选择合适的代码分支策略。
💍
陈琦
2023-05-31

测试开发之前端篇-浏览器开发者工具使用

Chrome开发者工具是浏览器內置的、用于对网页浏览有关的内容和行为进行查看和调试的工具。可使用快捷键Ctrl + Shift + J ( 在 Mac 上使用 Cmd + Opt + J) 打开,他显示在浏览器的底部,包涵了以下几个Tab的功能。 Console 控制台 用于查看日志和调试JavaScript脚本。以上是百度首页的控制台,大家可以发现开发者用日志的形式打印了一条招聘信息。 在...
aaronchen2k 2021-10-19
返回顶部
客服头像
丁芝
高级客户经理
客服微信
17663906485
1481227768
统一服务热线 4006-8899-23
我要提问提问有任何问题,您都可以在这里提问。问题反馈反馈点击这里,让我们聆听您的建议与反馈。