Jenkins集成jacoco收集单元测试覆盖率

2020-02-28

目录

0 整体思路
1 Jenkins创建JacocoIntegrateTestDemo项目
2 配置源码管理
3 配置Build
4 配置构建后操作
5 构建执行,查看代码覆盖率
6 控制台输出

0 整体思路

  1. jenkins安装和全局工具配置见 1 安装版本 2 全局工具配置
  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>
  3. 创建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

参考

[1] 使用jenkins的jacoco插件快速实现统计单元测试覆盖率

Jenkins集成jacoco收集单元测试覆盖率的更多相关文章

  1. Jenkins集成jacoco收集集成测试覆盖率

    Jenkins集成jacoco收集集成测试覆盖率 2020-02-28 目录 0 整体思路1 安装版本2 全局工具配置3 Jenkins创建JacocoIntegrateTestDemo项目  3.1 ...

  2. Jacoco收集单元测试、集成测试和系统功能测试覆盖率

    Jacoco收集单元测试.集成测试和系统功能测试覆盖率 2020-02-27  目录 1 安装版本2 被测系统代码示例3 收集单元测试覆盖率4 收集集成和功能测试覆盖率 代码覆盖率可在单元测试.系统测 ...

  3. 在jenkins和sonar中集成jacoco(一)--使用jacoco收集单元测试的覆盖率

    之前系统的持续集成覆盖率工具使用的是cobetura,使用的过程中虽然没什么问题,但感觉配置比较麻烦,现在准备改用jacoco这个覆盖率工具来代替它.接下来我介绍一下jenkins配置jacoco,并 ...

  4. jenkins集成python的单元测试

    最近在研究jenkins的集成,然后想把自己写的python工具也用jenkins集成一下 废话少说,来看结构 sparking.py ''' @author: lianying ''' class ...

  5. SonarQube学习(四)- 使用Jenkins集成JaCoCo和SonarQube检查代码测试覆盖率

    一.前言 我始终觉得学习这件事是自己的事,自己会了就是会了,无关于他人,但有点小伤感的是现在的阅读量开始走低. 二.准备 安装Jenkins,请移步<Docker学习(二)- Docker 安装 ...

  6. jacoco + eclipse单元测试覆盖率

    概念 Jacoco:JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant.Maven中:可以作为Eclipse插件,可以使用其JavaAgent技术监控J ...

  7. Android-jacoco代码覆盖率:单元测试覆盖率+功能测试覆盖率

    参考:https://docs.gradle.org/current/dsl/org.gradle.testing.jacoco.tasks.JacocoCoverageVerification.ht ...

  8. 在jenkins和sonar中集成jacoco(三)--使用jacoco收集集成测试的覆盖率

    我们系统使用weblogic做服务器,集成测试框架使用的是junit+selenium. 首先,要把jacoco的jacocoagent.jar包放到部署应用的服务器上,接着在系统服务的JAVA_OP ...

  9. [转载] JaCoCo:分析单元测试覆盖率的利器

    转载自http://www.ibm.com/developerworks/cn/java/j-lo-jacoco/和http://www.cnblogs.com/chenfengmugu/p/4937 ...

随机推荐

  1. (1)C#连接数据库:Connection对象

    连接数据库:Connection对象 1.Connection对象概述   Connection对象是一个连接对象,主要功能是建立与物理数据库的连接.其主要包括4种访问数据库的对象类,也可称为数据提供 ...

  2. GP工作室-团队项目Beta冲刺

    GP工作室-团队项目Beta冲刺 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/ 这个作业要求 ...

  3. c#数字图像处理(十)图像缩放

    图像几何变换(缩放.旋转)中的常用的插值算法 在图像几何变换的过程中,常用的插值方法有最邻近插值(近邻取样法).双线性内插值和三次卷积法. 最邻近插值: 这是一种最为简单的插值方法,在图像中最小的单位 ...

  4. 初入计科,首次接触C的感受

    1 你对计算机科学与技术专业了解是怎样? 答:一开始我对这个专业并无了解,觉得无非是把电脑给学透.经过一周的学习后,我深刻地感觉自己对这个专业深深的误解. 通过翻阅书籍,上网浏览相关信息,我认为该专业 ...

  5. Java基础语法面试题50题整理(带答案)

    嗯,之前某些原因整理了这份面试题,加油生活 (:   0,嗯,先做简单的,那个不对() 1,int [] sy = {0,9,2,3}; 2,int [] sy1 = new int[4]; 3,in ...

  6. Day9-Python3基础-多线程、多进程

    1.进程.与线程区别 2.python GIL全局解释器锁 3.线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Que ...

  7. mysql--->B+tree索引的设计原理

    1.什么是数据库的索引 每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不 ...

  8. 用set、map等存储自定义结构体时容器内部判别各元素是否相同的注意事项

    STL作为通用模板极大地方便了C++使用者的编程,因为它可以存储任意数据类型的元素 如果我们想用set与map来存储自定义结构体时,如下 struct pp { double xx; double y ...

  9. C# 定时器导致的内存泄露问题

    C# 中有三种定时器,System.Windows.Forms 中的定时器和 System.Timers.Timer 的工作方式是完全一样的,所以,这里我们仅讨论 System.Timers.Time ...

  10. centos7安装lnmp

    一.配置CentOS 第三方yum源(CentOS默认的标准源里没有nginx软件包) [root@localhost ~]# yum install wget #安装下载工具wget [root@l ...