sonar jacoco 覆盖率为0_Jacoco统计代码覆盖率
Jacoco,看起來就很好喝的樣子。
一、Jacoco簡介
1、Jacoco全稱JavaCodeCoverage,
是一個開源的,統(tǒng)計JAVA覆蓋率的工具。
Python項目是統(tǒng)計不了的
2、Jacoco采用on-the-fly的模式進(jìn)行插樁,
部署環(huán)境時,jacoco會介入class文件的加載,插入探針。
插入成功后,jacoco會新起一個端口來開啟tcp服務(wù),同時提供api來連接這個服務(wù),從而dump數(shù)據(jù)。
二、Jacoco下載
1、官網(wǎng)地址
https://www.jacoco.org/jacoco/index.html,
下載最新的jacoco-0.85.zip
2、解壓zip包,得到我們想要的3個jar包。
三、Springboot代碼完善
測試代碼覆蓋率,我們要先準(zhǔn)備被測試的springboot代碼。
修改上一章的內(nèi)容,添加一個主函數(shù)和controller。
1、新增CalcController.java,
這樣可以通過http的方式可以請求calc的方法
package com.tool.controller;import com.tool.Calc;
import com.tool.Impl.CalcImpl;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;@Controller
public class CalcController {@ResponseBody@RequestMapping("/hello")public Map<String,Object> showHelloWorld(){Map<String,Object> map = new HashMap<>();map.put("msg","HelloWorld");return map;}@ResponseBody@RequestMapping(value="/calc/add")public String calcadd(HttpServletRequest request) {int x = Integer.parseInt(request.getParameter("x"));int y = Integer.parseInt(request.getParameter("y"));Calc myc = new CalcImpl();return (myc.add(x,y)+"");}@ResponseBody@RequestMapping(value="/calc/sub")public String calcsub(HttpServletRequest request) {int x = Integer.parseInt(request.getParameter("x"));int y = Integer.parseInt(request.getParameter("y"));Calc myc = new CalcImpl();return (myc.sub(x,y)+"");}@ResponseBody@RequestMapping(value="/calc/abs")public String calcabs(HttpServletRequest request) {int x = Integer.parseInt(request.getParameter("x"));Calc myc = new CalcImpl();return (myc.abs(x)+"");}@ResponseBody@RequestMapping(value="/calc/func")public String calfunc(HttpServletRequest request) {int x = Integer.parseInt(request.getParameter("x"));Calc myc = new CalcImpl();return (myc.func(x)+"");}
}2、新增主函數(shù)
HelloWorldMainApplication.java,
啟動webstarter
package com.tool;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/**@SpringBootApplication來標(biāo)注主程序,說明這是一個springboot應(yīng)用*/
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {// spring應(yīng)用啟動起來SpringApplication.run(HelloWorldMainApplication.class,args);}
}3、maven打包test4.jar
這樣我們的被測項目就準(zhǔn)備好了。
四、Jacoco啟動項目
官方提供了3種方案啟動項目
(tcpclient方案看不懂、直接pass掉)。
1、第一種方案:文件的方式啟動項目
它的好處是關(guān)閉服務(wù)可以直接生成res.exec,
壞處是必須要關(guān)閉服務(wù)才能生成。
java -javaagent:jacocoagent.jar=includes=com.*,output=file,destfile=d:/jacoco/filetest/result/res.exec,append=true -jar test4.jar2、第二種方案:tcp的方式啟動項目
它的好處是不用關(guān)閉服務(wù),隨時可以dump,
這也是最常用的啟動方式
java -javaagent:jacocoagent.jar=includes=com.*,output=tcpserver,port=6300,address=localhost,append=true -jar test4.jar執(zhí)行dump語句生成res.exec
java -jar jacococli.jar dump --address localhost --port 6300 --destfile d:/jacoco/tcptest/result/tcp.exec3、參數(shù)解釋:
- javaagent
jacocoagent.jar包的地址
- includes
對要插樁的包進(jìn)行過濾,*代表所有的class都要進(jìn)行插樁。 - output
啟動項目的兩種方案,file或者tcpserver
- port
jacoco開啟的tcpserver的端口,dump的時候也要執(zhí)行相同端口 - address
jacoco對外開放的tcpserver的訪問地址。
地址為127.0.0.1的時候,只能在這臺服務(wù)器上進(jìn)行dump
地址為實際ip時,可以在任意一臺機(jī)器上進(jìn)行數(shù)據(jù)的dump - destfile
exec文件的生成目錄 - append
默認(rèn)為true,執(zhí)行 dump時在原文件末尾進(jìn)行追加
如果改為false,執(zhí)行 dump時會直接覆蓋原文件
五、解析exec
1、ant解析
安裝ant環(huán)境,建立build.xml,執(zhí)行ant dump,再執(zhí)行ant report。
ant解析的難點是建立build.xml,我嘗試了下,成仁了,果斷放棄。
請大家自行嘗試。
2、開發(fā)工具解析
idea點擊Analyze——Show CCD
點擊+號,選擇exec,show selected。
注意每次更新了覆蓋率,都要重新點擊+號,添加文件。
java -jar jacococli.jar report ./tcp.exec --classfiles D:workspace2springboot-04-testtargetclasses --sourcefiles D:workspace2springboot-04-testsrcmainjava --html report5、解析出來的完整report:
每一行的覆蓋率都會展示:
更多jacoco案例或者python相關(guān)知識請關(guān)注我的公主號:凡大哥隨筆。
總結(jié)
以上是生活随笔為你收集整理的sonar jacoco 覆盖率为0_Jacoco统计代码覆盖率的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python dataframe 分位数
- 下一篇: 想问问有没有近视多年去医院做过眼睛的小伙