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


之前系統的持續集成覆蓋率工具使用的是cobetura,使用的過程中雖然沒什么問題,但感覺配置比較麻煩,現在准備改用jacoco這個覆蓋率工具來代替它。接下來我介紹一下jenkins配置jacoco,並且在sonar顯示單元測試和集成測試覆蓋率的過程。

用jacoco來實現單元測試的覆蓋率比較簡單,在ant腳本中先增加下面的任務:

build.xml
1
2
3
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">  <classpath path="${basedir}/jacoco_lib/jacocoant.jar" /> </taskdef> 

這里要引入jacoco的jar包jacocoant.jar,增加了這個命令之后,將原有的單元測試任務用 jacoco:coverage包括起來,實例代碼如下:

build.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<target name="unitTest" depends="test_compile">  <mkdir dir="${junit.dir}"/>  <jacoco:coverage destfile="${basedir}/ut.exec">  <junit fork="true" forkmode="once" printsummary="on" failureproperty="unit.test.failure">  <classpath>  <pathelement location="${build.class}"/>  <fileset dir="${build.lib.dir}"/>  </classpath>   <formatter type="xml"/>  <batchtest todir="${junit.dir}">  <fileset dir="${src.test.dir}">  <include name="**/*Test.java"/>  </fileset>  </batchtest>  </junit>  </jacoco:coverage>     <!-- 其他內容 --> </target> 

jacoco:coverage的destfile參數是指生成的覆蓋率文件路徑,不寫默認文件名為jacoco.exec。另外在forkmode這個參數設置為once,可以提高你的單元測試的執行效率。

這樣跑完單元測試后,就會在指定路徑下生成覆蓋率文件ut.exec(或默認的jacoco.exec,在工程根目錄下)。

如果要在本地生成jacoco的覆蓋率報告,可以增加如下任務:

build.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<target name="jacocoReport">  <delete dir="${basedir}/jacoco"/>  <mkdir dir="${result.jacoco.report.dir}/ut"/>  <jacoco:report>  <executiondata>  <file file="${basedir}/ut.exec"/>  </executiondata>   <structure name="jacoco_demo">  <classfiles>  <fileset dir="${build.dir}"/>  </classfiles>  <sourcefiles encoding="UTF-8">  <fileset dir="${src.dir}"/>  </sourcefiles>  </structure>  <html destdir="${result.jacoco.report.dir}/ut"/>  </jacoco:report> </target> 

生成覆蓋率報告需要覆蓋率文件(exec)、源碼、編譯后的class文件。這里導出的格式是html,還有xml和cvs 2種格式可以導出,具體參考jacoco:report
注意,這里的class文件和exec文件必須用同一個jvm執行,如果是用JVM A來編譯class文件,然后用JVM B來生成覆蓋率文件,生成出來的報告覆蓋率會為0%。這一點對生成集成測試的覆蓋率特別重要。


免責聲明!

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



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