JaCoCO环境部署 + SpringBoot项目源代码 + 全量代码覆盖率搭建:https://www.jianshu.com/p/9f60ee7192fd
方案原理:
- 收集两个版本的差异代码
- 生成report阶段判断代码是否是增量代码,报告里只统计增量代码
使用开源工具:
基于git和svn的差异代码获取
code-diff: git clone https://gitee.com/Dray/code-diff.git
对jacococli.jar包进行二次开发
jacoco: git clone https://gitee.com/Dray/jacoco.git
实战步骤:
- 修改项目代码(新增或修改类、方法),然后提交代码到git平台
- 将新改动的项目代码打包生成jar包。项目根目录下,命令执行
mvn clean package- 项目启动命令中加入jacocoagent,启动项目
java -javaagent:/Users/zhangjiangying/Downloads/jacoco-addtional/jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=localhost,append=true -jar /Users/zhangjiangying/Downloads/jacoco-addtional/demo-0.0.1-SNAPSHOT.jar- 服务启动后,在浏览器上调用几个接口触发代码覆盖
用二次开发的jacococli.jar包生成exec文件
java -jar /Users/zhangjiangying/Downloads/jacoco-addtional/org.jacoco.cli.jar dump --address localhost --port 6300 --destfile ./jacoco_tcp_1.exec- 通过code-diff获取差异代码
部署工具代码(code-diff: git clone https://gitee.com/Dray/code-diff.git)到本地
修改修改application.yml配置文件中Git的账号、密码,并确保git上的项目访问权限是public- 启动项目,然后访问http://127.0.0.1:8085/doc.html,在差异代码模块下,调用【git获取差异代码】接口,入参写入要比对的两个版本的commitID号,再加上项目的git地址,调用此接口,可获取差异代码【"uniqueData"】字段
image.png
image.png- 生成差异代码覆盖统计的report,在【"--diffCode"】后加入【"uniqueData"】信息
java -jar /Users/zhangjiangying/Downloads/jacoco-addtional/org.jacoco.cli.jar report /Users/zhangjiangying/Downloads/jacoco-addtional/jacoco_tcp_1.exec --classfiles /Users/zhangjiangying/Downloads/jacoco-0.8.9/lib/jacoco_demo/target/classes --sourcefiles /Users/zhangjiangying/Downloads/jacoco-0.8.9/lib/jacoco_demo/src/main/java --html diff-report001 --diffCode "[{\"classFile\":\"com/example/demo/GameController\",\"lines\":[{\"endLineNum\":17,\"startLineNum\":0,\"type\":\"INSERT\"}],\"methodInfos\":[{\"endLine\":10,\"methodName\":\"run\",\"parameters\":[],\"startLine\":7},{\"endLine\":13,\"methodName\":\"swim\",\"parameters\":[],\"startLine\":12},{\"endLine\":16,\"methodName\":\"jump\",\"parameters\":[],\"startLine\":15}],\"moduleName\":\"\",\"type\":\"ADD\"},{\"classFile\":\"com/example/demo/HelloController\",\"lines\":[{\"endLineNum\":25,\"startLineNum\":23,\"type\":\"REPLACE\"},{\"endLineNum\":30,\"startLineNum\":28,\"type\":\"REPLACE\"}],\"methodInfos\":[{\"endLine\":26,\"methodName\":\"footballPlayer\",\"parameters\":[],\"startLine\":23},{\"endLine\":31,\"methodName\":\"pingpangstar\",\"parameters\":[],\"startLine\":28}],\"moduleName\":\"\",\"type\":\"MODIFY\"}]" --encoding=utf-8
image.png
image.png
image.png
image.png
- 生成全量代码统计的reprot,可进行对比
java -jar /Users/zhangjiangying/Downloads/jacoco-addtional/org.jacoco.cli.jar report /Users/zhangjiangying/Downloads/jacoco-addtional/jacoco_tcp_1.exec --classfiles /Users/zhangjiangying/Downloads/jacoco-0.8.9/lib/jacoco_demo/target/classes --sourcefiles /Users/zhangjiangying/Downloads/jacoco-0.8.9/lib/jacoco_demo/src/main/java --html report002 --encoding=utf-8
image.png
image.png
image.png
参考code-diff工具原版:https://blog.csdn.net/tushuping/article/details/112613528
参考视频:https://www.bilibili.com/video/BV1tr4y1i7f1?p=9&vd_source=35fc7fde72f5261003f3893e6be02e18








