JaCoCO環(huán)境部署 + SpringBoot項目源代碼 + 全量代碼覆蓋率搭建:http://www.itdecent.cn/p/9f60ee7192fd
方案原理:
- 收集兩個版本的差異代碼
- 生成report階段判斷代碼是否是增量代碼,報告里只統(tǒng)計增量代碼
使用開源工具:
基于git和svn的差異代碼獲取
code-diff: git clone https://gitee.com/Dray/code-diff.git
對jacococli.jar包進行二次開發(fā)
jacoco: git clone https://gitee.com/Dray/jacoco.git
實戰(zhàn)步驟:
- 修改項目代碼(新增或修改類、方法),然后提交代碼到git平臺
- 將新改動的項目代碼打包生成jar包。項目根目錄下,命令執(zhí)行
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- 服務(wù)啟動后,在瀏覽器上調(diào)用幾個接口觸發(fā)代碼覆蓋
用二次開發(fā)的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上的項目訪問權(quán)限是public- 啟動項目,然后訪問http://127.0.0.1:8085/doc.html,在差異代碼模塊下,調(diào)用【git獲取差異代碼】接口,入?yún)懭胍葘Φ膬蓚€版本的commitID號,再加上項目的git地址,調(diào)用此接口,可獲取差異代碼【"uniqueData"】字段
image.png
image.png- 生成差異代碼覆蓋統(tǒng)計的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
- 生成全量代碼統(tǒng)計的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








