日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

sonar jacoco 覆盖率为0_Jacoco统计代码覆盖率

發布時間:2023/11/27 生活经验 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sonar jacoco 覆盖率为0_Jacoco统计代码覆盖率 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Jacoco,看起來就很好喝的樣子。

一、Jacoco簡介

1、Jacoco全稱JavaCodeCoverage,

是一個開源的,統計JAVA覆蓋率的工具。

Python項目是統計不了的

2、Jacoco采用on-the-fly的模式進行插樁,

部署環境時,jacoco會介入class文件的加載,插入探針。

插入成功后,jacoco會新起一個端口來開啟tcp服務,同時提供api來連接這個服務,從而dump數據。

二、Jacoco下載

1、官網地址

https://www.jacoco.org/jacoco/index.html,

下載最新的jacoco-0.85.zip

2、解壓zip包,得到我們想要的3個jar包。

三、Springboot代碼完善

測試代碼覆蓋率,我們要先準備被測試的springboot代碼。

修改上一章的內容,添加一個主函數和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、新增主函數

HelloWorldMainApplication.java,

啟動webstarter

package com.tool;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/**@SpringBootApplication來標注主程序,說明這是一個springboot應用*/
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {// spring應用啟動起來SpringApplication.run(HelloWorldMainApplication.class,args);}
}

3、maven打包test4.jar

這樣我們的被測項目就準備好了。

四、Jacoco啟動項目

官方提供了3種方案啟動項目

(tcpclient方案看不懂、直接pass掉)。

1、第一種方案:文件的方式啟動項目

它的好處是關閉服務可以直接生成res.exec,

壞處是必須要關閉服務才能生成。

java -javaagent:jacocoagent.jar=includes=com.*,output=file,destfile=d:/jacoco/filetest/result/res.exec,append=true -jar test4.jar

2、第二種方案:tcp的方式啟動項目

它的好處是不用關閉服務,隨時可以dump,

這也是最常用的啟動方式

java -javaagent:jacocoagent.jar=includes=com.*,output=tcpserver,port=6300,address=localhost,append=true -jar test4.jar

執行dump語句生成res.exec

java -jar jacococli.jar dump --address localhost --port 6300 --destfile d:/jacoco/tcptest/result/tcp.exec

3、參數解釋:

  • javaagent

jacocoagent.jar包的地址

  • includes
    對要插樁的包進行過濾,*代表所有的class都要進行插樁。
  • output

啟動項目的兩種方案,file或者tcpserver

  • port
    jacoco開啟的tcpserver的端口,dump的時候也要執行相同端口
  • address
    jacoco對外開放的tcpserver的訪問地址。
    地址為127.0.0.1的時候,只能在這臺服務器上進行dump
    地址為實際ip時,可以在任意一臺機器上進行數據的dump
  • destfile
    exec文件的生成目錄
  • append
    默認為true,執行 dump時在原文件末尾進行追加
    如果改為false,執行 dump時會直接覆蓋原文件

五、解析exec

1、ant解析

安裝ant環境,建立build.xml,執行ant dump,再執行ant report。

ant解析的難點是建立build.xml,我嘗試了下,成仁了,果斷放棄。

請大家自行嘗試。

2、開發工具解析

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 report

5、解析出來的完整report:

每一行的覆蓋率都會展示:

更多jacoco案例或者python相關知識請關注我的公主號:凡大哥隨筆。

總結

以上是生活随笔為你收集整理的sonar jacoco 覆盖率为0_Jacoco统计代码覆盖率的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。