jacoco-1-java程式碼測試覆蓋率之本地環境初體驗

小龍發表於2020-10-25

前言

jacoco是一個開源的覆蓋率工具,它針對的開發語言是java,其使用方法很靈活,可以插樁到Ant、Maven中,可以使用其JavaAgent技術監控Java程式等。

那麼本次主要使用對java程式碼進行覆蓋率統計,比如A測試攻城獅在功能測試時/介面測試時,實際覆蓋測試了多少java程式碼,可以作為一個評判。

jacoco官網地址:http://www.eclemma.org(有牆)

一、jacoco基本介紹

1、jacoco是根據控制流Type來採用不同的探針插樁策略的。(植入探針)

2、探針原理是位元組碼指令集插入到java方法中,程式執行後可以被記錄,它不會改變原有程式碼的行為。

3、jacoco支援on-the-fly和offline的兩種插樁模式。本次主要使用在java -jar xx.jar啟動的時候加入引數(on-the-fly)

行覆蓋率:度量被測程式的每行程式碼是否被執行,判斷標準行中是否至少有一個指令被執行。

類覆蓋率:度量計算class類檔案是否被執行。

分支覆蓋率:度量if和switch語句的分支覆蓋情況,計算一個方法裡面的總分支數,確定執行和不執行的 分支數量。

方法覆蓋率:度量被測程式的方法執行情況,是否執行取決於方法中是否有至少一個指令被執行。

指令覆蓋:計數單元是單個java二進位制程式碼指令,指令覆蓋率提供了程式碼是否被執行的資訊,度量完全 獨立原始碼格式。

圈複雜度:在(線性)組合中,計算在一個方法裡面所有可能路徑的最小數目,缺失的複雜度同樣表示測 試案例沒有完全覆蓋到這個模組。

二、必備環境

本篇基於Windows下使用:

1、ant 環境

所有版本:https://downloads.apache.org/ant/binaries/

本篇直接點選此連結下載:https://downloads.apache.org/ant/binaries/apache-ant-1.9.15-bin.zip   下載後直接解壓:

注意Windows字尾為.zip,如:apache-ant-1.9.15-bin.zip

設定環境變數:

①將bin、lib目錄新增至環境變數中的系統變數path即可,如下圖我的解壓路徑:

D:\apache-ant-1.9.15\bin
D:\apache-ant-1.9.15\lib

 ②cmd驗證環境:

cmd輸入:ant -v

如下圖即可顯示ant的版本為:1.9.15

2、jacoco

全部版本下載地址:https://repo1.maven.org/maven2/org/jacoco/jacoco/

可在我網盤中下載連結:https://pan.baidu.com/s/19evt3K1eo1y7GeeyggD5Hg 提取碼:gsxl 

強烈推薦clone git:https://github.com/git-gsxl/jacoco-demo.git

隨你自己解壓到哪個目錄,

3、java.jar 與 build.xml 檔案 

檔案在網盤中下載連結:https://pan.baidu.com/s/19evt3K1eo1y7GeeyggD5Hg 提取碼:gsxl 

強烈推薦clone git:https://github.com/git-gsxl/jacoco-demo.git

4、配置build.xml檔案

①配置 jacocoant.jar 檔案路徑;

②配置原始碼路徑

③配置server_ip

④其它自行根據所需配置

三、啟動 jar 服務

1、在 jar 包cmd下輸入啟動命令:java -javaagent:F:/jacoco-0.8.6/lib/jacocoagent.jar=includes=*,output=tcpserver,port=9999,address=127.0.0.1,append=true -jar demo-V1024.jar

通過javaagentJavaAgent會監聽伺服器端設定的TCP port,然後把收集到的資訊(jacoco.exec)寫入TCP connection,所以服務不需要關閉。

C:\Users\Administrator\Desktop\jacoco-demo>java -javaagent:F:/jacoco-0.8.6/lib/jacocoagent.jar=includes=*,output=tcpserver,port=9999,address=127.0.0.1,append=true -jar demo-V1024.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.4.RELEASE)

2020-10-24 18:08:50.125  INFO 13264 --- [           main] c.s.j.jacocodemo.JacocodemoApplication   : Starting JacocodemoApplication vV1024 on WIN-Q3LSDAOKUJ1 with PID 13264 (C:\Users\Administrator\Desktop\jacoco-demo\demo-V1024.jar started by Administrator in C:\Users\Administrator\Desktop\jacoco-demo)
2020-10-24 18:08:50.133  INFO 13264 --- [           main] c.s.j.jacocodemo.JacocodemoApplication   : No active profile set, falling back to default profiles: default
2020-10-24 18:08:53.933  INFO 13264 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-10-24 18:08:53.989  INFO 13264 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-10-24 18:08:53.989  INFO 13264 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.38]
2020-10-24 18:08:54.195  INFO 13264 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-10-24 18:08:54.222  INFO 13264 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3949 ms
2020-10-24 18:08:54.748  INFO 13264 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-10-24 18:08:55.272  INFO 13264 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-10-24 18:08:55.301  INFO 13264 --- [           main] c.s.j.jacocodemo.JacocodemoApplication   : Started JacocodemoApplication in 6.268 seconds (JVM running for 7.3)

2、執行 ant 命令

在此之前我們在瀏覽器上訪問我們的服務,ip+prot (既我已經訪問了hello的方法,業務測試覆蓋了hello方法)

①ant dump

C:\Users\Administrator\Desktop\jacoco-demo>ant dump
Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.0_151\lib\tools.jar
Buildfile: C:\Users\Administrator\Desktop\jacoco-demo\build.xml

dump:
[jacoco:dump] Connecting to /127.0.0.1:9999
[jacoco:dump] Dumping execution data to C:\Users\Administrator\Desktop\jacoco-report\jacoco-integation.exec

BUILD SUCCESSFUL
Total time: 0 seconds

C:\Users\Administrator\Desktop\jacoco-demo>

②ant report

C:\Users\Administrator\Desktop\jacoco-demo>ant report
Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.0_151\lib\tools.jar
Buildfile: C:\Users\Administrator\Desktop\jacoco-demo\build.xml

report:
    [mkdir] Created dir: C:\Users\Administrator\Desktop\jacoco-demo\jacoco-report
[jacoco:report] Loading execution data file G:\5-ppl-study-java\jacoco-demo\target\coverage\jacoco-integation.exec
[jacoco:report] Writing bundle 'Check Order related' with 2 classes

BUILD SUCCESSFUL
Total time: 0 seconds

四、檢視覆蓋率報告

 1、在jacoco-report目錄下開啟,index.html即可

 2、點選進入 controller 檢視詳情

 可以發現與我們上述所示的一致,只覆蓋hello方法。剩下看你們了,去試試執行其它方法,再執行ant,再檢視報告。

 歡迎來大家QQ交流群一起學習:482713805

相關文章