二开Jacoco + codediff 实现增量覆盖率报告
一、教学视频:https://www.bilibili.com/video/BV1tr4y1i7f1?p=9
二、前期准备
下载 Maven:https://maven.apache.org/download.cgi
安装配置 Maven: https://blog.csdn.net/m0_67402564/article/details/123891208
配置阿里云 Maven 镜像加速:https://developer.aliyun.com/mvn/guide
安装 eclipse 和 Java JDK
————————————————————————————————————————————
准备一个Java SpringBoot 被测项目:https://gitee.com/dzitcast/springbootdemo
安装启动:在项目 pom.xml 目录下,cmd 命令 mvn clean, 然后mvn install,重命名生成的 jar 包 springbootdemo.jar
启动项目:java -jar springbootdemo-0.0.1-SNAPSHOT.jar
测试项目 postman 访问:http://127.0.0.1:18082/emp/selectAIIEmpByPage
————————————————————————————————————————————
下载Jacoco:https://www.jacoco.org/jacoco/index.html
解压取出:jacocoagent.jar
————————————————————————————————————————————
gitee项目:Jacoco 二开项目 https://gitee.com/Dray/jacoco
二次开发编译好的 cli.jar 包 https://gitee.com/Dray/jacoco/releases (注意!:选 org.jacoco.cli-0.8.7-SNAPSHOT-nodeps.jar , 重命名为 jacococli2.jar)
————————————————————————————————————————————
gitee项目:code-diff https://gitee.com/Dray/code-diff
修改application.yml 配置文件中 Git 的账号 密码 和本地项目仓库目录地址
code-diff\application 目录下,maven clean , maven install,生成 一个 application-1.0.0-SNAPSHOT.jar 包
java -jar application-1.0.0-SNAPSHOT.jar 启动
本地访问:http://127.0.0.1:8085/doc.html
配置 git 项目 token :Authorization(apiKey)
在调试里面:填上 项目git 地址 和 git commit 上下版本号 ,点击发送即可
三、使用教程
以下文件移动到被测项目根目录:
被测项目 jar 包 :springbootdemo.jar
jacocoagent.jar
org.jacoco.cli-0.8.7-SNAPSHOT-nodeps.jar 重命名为 jacococli2.jar
使用步骤:
0、前去修改被测 Java springboot 项目的代码,使得代码有版本的差异
1、用 Jacocoagent 启动项目收集覆盖率信息,然后测试项目生成覆盖率数据
java -javaagent:jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=localhost,append=true -jar springbootdemo.jar
2、测试完后,用二次开发的 cli 包生成 exec 文件
java -jar jacococli2.jar dump --address 127.0.0.1 --port 6300 --destfile springbootdemo.exec
3、通过 code-diff 服务获取两次提交的代码差异:详细看视频=》 jacoco增量应用,拿到变更的 json 数据
[{\"classFile\":\"me/xz/controller/UserController\",\"lines\":[{\"endLineNum\":70,\"startLineNum\":69,\"type\":\"REPLACE\"}],\"methodInfos\":[{\"methodName\":\"login\",\"parameters\":\"User\"}],\"moduleName\":\"src\",\"type\":\"MODIFY\"},{\"classFile\":\"me/xz/bean/User\",\"lines\":[{\"endLineNum\":28,\"startLineNum\":20,\"type\":\"INSERT\"}],\"methodInfos\":[{\"methodName\":\"getPassword\",\"parameters\":\"\"},{\"methodName\":\"getUsername\",\"parameters\":\"\"}],\"moduleName\":\"src\",\"type\":\"MODIFY\"}]
4、用二次开发的 cli 包生成 report 增量覆盖率报告
java -jar jacococli2.jar report springbootdemo.exec --classfiles target\classes --sourcefiles src\main\java --html html-report-diff --xml report-diff.xml --diffCode "[{\"classFile\":\"me/xz/controller/UserController\",\"lines\":[{\"endLineNum\":70,\"startLineNum\":69,\"type\":\"REPLACE\"}],\"methodInfos\":[{\"methodName\":\"login\",\"parameters\":\"User\"}],\"moduleName\":\"src\",\"type\":\"MODIFY\"},{\"classFile\":\"me/xz/bean/User\",\"lines\":[{\"endLineNum\":28,\"startLineNum\":20,\"type\":\"INSERT\"}],\"methodInfos\":[{\"methodName\":\"getPassword\",\"parameters\":\"\"},{\"methodName\":\"getUsername\",\"parameters\":\"\"}],\"moduleName\":\"src\",\"type\":\"MODIFY\"}]" --encoding=utf-8
5、获取全量覆盖率报告
java -jar jacococli2.jar report springbootdemo.exec --classfiles target\classes --sourcefiles src\main\java --html html-report --xml report.xml --encoding=utf-8
总结:
修改Java SpringBoot被测项目代码,使得代码有版本的差异
=》用 Jacoco agent 启动 Java SpringBoot被测项目,开始收集测试项目覆盖率数据
= 》 测试完后用 二次开发的 cli 包生成 exec 文件
=》通过 code-diff 服务获取两次提交的代码差异:详细看视频=》 jacoco增量应用,拿到变更的 json 数据
=》用二次开发的 cli 包生成 report 增量覆盖率报告