Jenkins集成jacoco收集單元測試覆蓋率
2020-02-28
0 整體思路
1 Jenkins創建JacocoIntegrateTestDemo項目
2 配置源碼管理
3 配置Build
4 配置構建后操作
5 構建執行,查看代碼覆蓋率
6 控制台輸出
0 整體思路
- jenkins安裝和全局工具配置見 1 安裝版本 2 全局工具配置
- 單元測試不需要通過添加javaagent選項啟動被測系統和執行ant dump來拉取jacoco.exec,只需在pom.xml設置插件,在被測項目中增加單測代碼
<?xml version="1.0" encoding="UTF-8"?> <project name="JacocoDmo" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco"> <!--Jacoco 的安裝路徑--> <property name="jacocoantPath" value="D:\software\jacoco\lib\jacocoant.jar"/> <!--最終生成 .exec 文件的路徑,Jacoco 就是根據這個文件生成最終的報告的--> <property name="jacocoexecPath" value=".\target\jacoco.exec"/> <!--遠程 Tomcat 服務的 ip 地址--> <property name="server_ip" value="10.8.116.81"/> <!--前面配置的遠程 Tomcat 服務打開的端口,要跟上面配置的一樣--> <property name="server_port" value="6300"/> <!--讓 ant 知道去哪兒找 Jacoco--> <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"> <classpath path="${jacocoantPath}" /> </taskdef> <!--dump 任務: 根據前面配置的 ip 地址,和端口號, 訪問目標 Tomcat 服務,並生成 .exec 文件。--> <target name="dump"> <jacoco:dump address="${server_ip}" reset="false" destfile="${jacocoexecPath}" port="${server_port}" append="true"/> </target> </project>
- 創建maven項目JacocoIntegrateTestDemo
1 Jenkins創建JacocoIntegrateTestDemo項目
圖1 創建maven項目JacocoIntegrateTestDemo
2 配置源碼管理
圖2 配置源碼管理
3 配置Build
圖3 配置Build
4 配置構建后操作
圖4 配置構建后操作
5 構建執行,查看代碼覆蓋率
圖5 代碼覆蓋率
6 控制台輸出

在 master 上構建 在工作空間 D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo 中 using credential 904f882b-46cf-42d6-ae43-68639b1b1482 > D:\Program Files\Git\bin\git.exe rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repository > D:\Program Files\Git\bin\git.exe config remote.origin.url git@e.coding.net:Ming8006/jacocodemo.git # timeout=10 Fetching upstream changes from git@e.coding.net:Ming8006/jacocodemo.git > D:\Program Files\Git\bin\git.exe --version # timeout=10 using GIT_SSH to set credentials > D:\Program Files\Git\bin\git.exe fetch --tags --force --progress -- git@e.coding.net:Ming8006/jacocodemo.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > D:\Program Files\Git\bin\git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10 > D:\Program Files\Git\bin\git.exe rev-parse "refs/remotes/origin/origin/master^{commit}" # timeout=10 Checking out Revision 06b9139dc9be810a86df0d093e2ab278ad765957 (refs/remotes/origin/master) > D:\Program Files\Git\bin\git.exe config core.sparsecheckout # timeout=10 > D:\Program Files\Git\bin\git.exe checkout -f 06b9139dc9be810a86df0d093e2ab278ad765957 # timeout=10 Commit message: "build.xml" > D:\Program Files\Git\bin\git.exe rev-list --no-walk 06b9139dc9be810a86df0d093e2ab278ad765957 # timeout=10 Parsing POMs Established TCP socket on 53538 [JacocoUnitTestDemo] $ "D:\Program Files\Java\jdk1.8.0_231\/bin/java" -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -cp "D:\Program Files (x86)\Jenkins\plugins\maven-plugin\WEB-INF\lib\maven35-agent-1.13.jar;D:\software\maven\boot\plexus-classworlds-2.6.0.jar;D:\software\maven/conf/logging" jenkins.maven3.agent.Maven35Main D:\software\maven "D:\Program Files (x86)\Jenkins\war\WEB-INF\lib\remoting-3.27.jar" "D:\Program Files (x86)\Jenkins\plugins\maven-plugin\WEB-INF\lib\maven35-interceptor-1.13.jar" "D:\Program Files (x86)\Jenkins\plugins\maven-plugin\WEB-INF\lib\maven3-interceptor-commons-1.13.jar" 53538 <===[JENKINS REMOTING CAPACITY]===>channel started Executing Maven: -B -f D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\pom.xml clean test [INFO] Scanning for projects... [INFO] [INFO] -----------------------< com.example:jacocodemo >----------------------- [INFO] Building jacocodemo 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ jacocodemo --- [INFO] Deleting D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\target [INFO] [INFO] --- jacoco-maven-plugin:0.8.3:prepare-agent (jacoco-initialize) @ jacocodemo --- [INFO] argLine set to "-javaagent:D:\\software\\maven\\repo\\m2\\org\\jacoco\\org.jacoco.agent\\0.8.3\\org.jacoco.agent-0.8.3-runtime.jar=destfile=D:\\Program Files (x86)\\Jenkins\\workspace\\JacocoUnitTestDemo\\target\\coverage\\jacoco-unit.exec" [INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ jacocodemo --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 1 resource [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ jacocodemo --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 6 source files to D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\target\classes [INFO] /D:/Program Files (x86)/Jenkins/workspace/JacocoUnitTestDemo/src/main/java/com/example/controller/MathController.java: D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\src\main\java\com\example\controller\MathController.java浣跨敤浜嗘湭緇忔鏌ユ垨涓嶅畨鍏ㄧ殑鎿嶄綔銆� [INFO] /D:/Program Files (x86)/Jenkins/workspace/JacocoUnitTestDemo/src/main/java/com/example/controller/MathController.java: 鏈夊叧璇︾粏淇℃伅, 璇蜂嬌鐢� -Xlint:unchecked 閲嶆柊緙栬瘧銆� [INFO] [INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ jacocodemo --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ jacocodemo --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.21.0:test (default-test) @ jacocodemo --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.example.service.MathServiceTest [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.08 s - in com.example.service.MathServiceTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [JENKINS] Recording test results [INFO] [INFO] --- jacoco-maven-plugin:0.8.3:report (jacoco-site) @ jacocodemo --- [INFO] Loading execution data file D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\target\coverage\jacoco-unit.exec [INFO] Analyzed bundle 'jacocodemo' with 6 classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.007 s [INFO] Finished at: 2020-02-28T16:51:22+08:00 [INFO] ------------------------------------------------------------------------ Waiting for Jenkins to finish collecting data [JENKINS] Archiving D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\pom.xml to com.example/jacocodemo/0.0.1-SNAPSHOT/jacocodemo-0.0.1-SNAPSHOT.pom channel stopped [JaCoCo plugin] Collecting JaCoCo coverage data... [JaCoCo plugin] **/target/coverage/**.exec;**/target/classes;**/src/main/java; locations are configured [JaCoCo plugin] Number of found exec files for pattern **/target/coverage/**.exec: 1 [JaCoCo plugin] Saving matched execfiles: D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\target\coverage\jacoco-unit.exec [JaCoCo plugin] Saving matched class directories for class-pattern: **/target/classes: [JaCoCo plugin] - D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\target\classes 6 files [JaCoCo plugin] Saving matched source directories for source-pattern: **/src/main/java: [JaCoCo plugin] Source Inclusions: **/*.java,**/*.groovy,**/*.kt,**/*.kts [JaCoCo plugin] Source Exclusions: [JaCoCo plugin] - D:\Program Files (x86)\Jenkins\workspace\JacocoUnitTestDemo\src\main\java 6 files [JaCoCo plugin] Loading inclusions files.. [JaCoCo plugin] inclusions: [] [JaCoCo plugin] exclusions: [] [JaCoCo plugin] Thresholds: JacocoHealthReportThresholds [minClass=0, maxClass=0, minMethod=0, maxMethod=0, minLine=0, maxLine=0, minBranch=0, maxBranch=0, minInstruction=0, maxInstruction=0, minComplexity=0, maxComplexity=0] [JaCoCo plugin] Publishing the results.. [JaCoCo plugin] Loading packages.. [JaCoCo plugin] Done. [JaCoCo plugin] Overall coverage: class: 17, method: 4, line: 3, branch: 0, instruction: 2, complexity: 4 Finished: SUCCESS