二开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 增量覆盖率报告

posted @ 2022-05-02 15:54  Ootori  阅读(1490)  评论(0编辑  收藏  举报