在jenkins和sonar中集成jacoco(三)--使用jacoco收集集成測試的覆蓋率


我們系統使用weblogic做服務器,集成測試框架使用的是junit+selenium。

首先,要把jacoco的jacocoagent.jar包放到部署應用的服務器上,接着在系統服務的JAVA_OPTIONS 后面添加如下參數:

1
-javaagent:[yourpath/]jacocoagent.jar=includes=com.xxx.xxx.*,output=tcpserver,address=xxx.xxx.xxx.xxx,port=xxxxx 

參數解釋:

  1. 前面的yourpath是放jacocoagent.jar文件的目錄路徑;
  2. includes是指要收集哪些類(注意不要關寫包名,最后要寫.*),不寫的話默認是*,會收集應用服務上所有的類,包括服務器和其他中間件的類,一般要過濾;
  3. output有4個值,分別是file,tcpserver,tcpclient,mbean,默認是file。使用file的方式只有在停掉應用服務的時候才能產生覆蓋率文件,而使用tcpserver的方式可以在不停止應用服務的情況下下載覆蓋率文件,后面會介紹如何使用dump方法來得到覆蓋率文件。
  4. address是ip, port是端口,這是使用tcpserver方式需要的2個參數,也是后面dump方法要用到的。(這里的address我只能使用服務器的ip,如果使用其他ip,服務啟動時會報錯。)

更多參數可以參考java agent
配置完應用服務的JAVA_OPTIONS之后,啟動服務器,然后可以開始跑你的集成測試,跑完之后,實際上jacocoagent已經將覆蓋率數據記錄下來了,我們可以使用下面的ant任務來dump出覆蓋率文件:

build.xml
1
2
3
  <target name="downloadUatCoverageData">  <jacoco:dump address="xxx.xxx.xxx.xxx" port="xxxx" reset="true" destfile="${basedir}/uat.exec" append="false"/>  </target> 

這里的address和port是剛才在JAVA_OPTIONS里面寫的address和port的值,destfile是指生成的覆蓋率文件路徑。

注意,這里雖然得到了集成測試的覆蓋率文件,但是需要應用服務器上的類文件才能產出相應的覆蓋率報告,如果類文件是其他JVM編譯的,產出的報告覆蓋率是0%。

有2種方法可以得到覆蓋率文件所需的class文件:

  1. 將應用服務部署的包(ear或war或jar)包下載下來之后解壓,即可得到對應的class文件;
  2. 在前面做單元測試之后,可以將class文件打成一個zip包,然后上傳到服務器,最后在需要的時候去服務器上取。

得到集成測試的覆蓋率文件之后,結合之前取到的單元測試覆蓋率文件,我們可以將2個文件合並,得到綜合的覆蓋率文件,命令如下:

build.xml
1
2
3
4
5
 <target name="mergeCoverage">  <jacoco:merge destfile="merged.exec">  <fileset dir="${basedir}" includes="*.exec"/>  </jacoco:merge>  </target> 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM