Jenkins+Ant+JaCoCo的代码覆盖率集成实践
Jenkins+Ant+JaCoCo的代码覆盖率集成实践
一、工具介绍
- Jenkins:
Jenkins是一个开源的、基于Java开发的持续集成工具,它可以帮助开发人员自动化构建、测试和部署软件项目。 - Ant:
Apache Ant是一个基于Java的自动化构建工具,类似于Maven,但更为灵活,适用于各种复杂的构建任务。 - JaCoCo:
JaCoCo是一个Java代码覆盖率工具,用于测量代码执行过程中哪些代码行被执行到,从而评估测试的有效性。
二、环境准备
Jenkins服务器环境准备
- Jenkins服务安装:在服务器上安装并配置Jenkins服务,确保其稳定运行,为后续的自动化构建与测试任务提供坚实基础。
- Ant工具安装:下载并安装Apache Ant工具,它是我们自动化构建流程中的重要一环,能够处理复杂的构建任务。
- JaCoCo工具安装:安装JaCoCo代码覆盖率工具,这是评估测试有效性的关键。我们将利用它来收集和分析代码覆盖率数据。
- Web服务源码与.class文件:准备Web服务的源代码文件(.java)以及编译后的.class文件,这些文件是构建和测试任务的基础。
Web服务器环境准备
- JaCoCo工具安装:在Web服务器上同样需要安装JaCoCo工具,以便与Jenkins服务器协同工作,共同实现代码覆盖率的收集与分析。
- Web服务jar包:部署Web服务的jar包至Web服务器,这是Web服务运行的基础,也是测试任务的目标对象。
三、集成实践
流程图

前置准备工作
- Jenkins服务器配置:
- 确保Jenkins服务已正确安装并处于运行状态。如需指导,请参考《Linux安装Jenkins指南》进行学习或实践操作。
- Jenkins插件安装:
- 在Jenkins服务器上安装
HTML Publisher插件。详细步骤及离线安装方法,请查阅《Jenkins离线安装插件》以获取帮助或进行实战演练。
- 在Jenkins服务器上安装
- Ant工具下载:
- 在Jenkins服务器上完成
Ant工具的下载与安装流程。
- 在Jenkins服务器上完成
- 工具下载:
- 在Jenkins服务器和Web服务器上,下载并准备好
jacoco工具。jacoco作为代码覆盖率工具的使用详情,可参考《代码覆盖率工具之Jacoco》进行学习或实际操作。
- 在Jenkins服务器和Web服务器上,下载并准备好
- Jenkins服务器资源准备:
- 确保Jenkins服务器上已获取Web服务的
java源文件及class文件,以便后续构建和测试流程使用。
- 确保Jenkins服务器上已获取Web服务的
- Web服务器部署:
- 在Web服务器上,准备好Web服务的
jar包,以便进行部署和发布操作。
- 在Web服务器上,准备好Web服务的
实践步骤
在Web服务器中运行Web服务
执行以下命令,在Web服务器上启动Web服务,并启用Jacoco代码覆盖率监测:
java -javaagent:/opt/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=6111,address=192.168.254.139 -Xverify:none -jar /opt/IAM_JAVA/IAM/src/MyApp.jar
在Jenkins服务器上配置Ant构建脚本
- 创建一个名为
build.xml的文件,并添加以下内容,以便配置Jacoco代码覆盖率报告生成任务:
<?xml version="1.0"?>
<project name="wftestReport" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">
<!--Jacoco的安装路径-->
<property name="jacocoantPath" value="/opt/jacoco/lib/jacocoant.jar" />
<!--最终生成.exec文件的路径,Jacoco就是根据这个文件生成最终的报告的-->
<property name="jacocoexecPath" value="/opt/jacoco/project/mergedwftest.exec" />
<!--生成覆盖率报告的路径-->
<property name="reportfolderPath" value="/opt/jacoco/project/report" />
<!--远程服务的ip地址-->
<property name="server_ip" value="192.168.254.139" />
<!--前面配置的服务打开的端口,要跟上面配置的一样-->
<!--这个端口有别于服务的端口,相当于是嵌在服务里的监视器-->
<property name="server_port" value="6111" />
<!--源代码路径,只到java层级就可以了-->
<!--可以配置多个源代码-->
<property name="exam_src" value="/opt/IAM_JAVA/IAM/src" />
<!--<property name="homework-student_src" value="/neworiental/jenkins/workspace/homework-manager-student-summer/seal-common/src/main/java"/>-->
<!--.class文件路径-->
<!--跑的是class,标注的是源码-->
<property name="exam_class" value="/opt/IAM_JAVA/IAM/src/bin" />
<!--<property name="homework-student_class" value="/neworiental/jenkins/workspace/homework-manager-student-summer/seal-common/target/classes"/>-->
<!--合并报告路径-->
<property name="mergePath" value="/opt/jacoco/project/report" />
<!--让ant知道去哪儿找Jacoco-->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${jacocoantPath}" />
</taskdef>
<!--dump任务:根据前面配置的ip地址,和端口号,访问目标服务,并生成.exec文件。-->
<target name="dump">
<jacoco:dump address="${server_ip}" reset="false" destfile="${jacocoexecPath}" port="${server_port}" append="false" />
</target>
<target name="merge">
<!--将路径下的exec文件全部合并,并存放到destfile中-->
<jacoco:merge destfile="/root/jacoco/merged.exec">
<fileset dir="${mergePath}" includes="*.exec" />
</jacoco:merge>
</target>
<!--jacoco任务:根据前面配置的源代码路径和.class文件路径,根据dump后,生成的.exec文件,生成最终的html覆盖率报告。-->
<target name="report">
<!--暂时不删除,一旦删除,其他两个的报告也没了-->
<delete dir="${reportfolderPath}" />
<mkdir dir="${reportfolderPath}" />
<jacoco:report>
<executiondata>
<file file="${jacocoexecPath}" />
</executiondata>
<structure name="代码覆盖率报告">
<group name="seal_exam">
<classfiles>
<fileset dir="${exam_class}" />
</classfiles>
<sourcefiles encoding="utf-8">
<fileset dir="${exam_src}" />
</sourcefiles>
</group>
<!-- <group name="homework-manager-student">
<classfiles>
<fileset dir="${homework-student_class}" />
</classfiles>
<sourcefiles encoding="utf-8">
<fileset dir="${homework-student_src}" />
</sourcefiles>
</group> -->
</structure>
<html destdir="${reportfolderPath}" encoding="utf-8" />
<csv destfile="/opt/jacoco/coverage/report.csv" />
</jacoco:report>
</target>
</project>
- 创建一个名为
build.sh的Shell脚本文件,并添加以下内容,以便执行Ant构建任务:
#!/bin/sh
source /etc/profile
cd /opt/jacoco/neworiental # build.xml 文件的路径
ant dump
ant report
在Jenkins服务器上创建一个新的构建项目
- 在
Build Steps中添加Execute shell步骤,并配置为执行build.sh脚本。

- 在
Post-build Actions中添加Publish HTML reports步骤,以便发布生成的HTML报告。


- 保存配置并启动构建任务。构建完成后,即可在Jenkins项目中查看生成的HTML报告。

- 点击
HTML Report链接,即可查看详细的代码覆盖率报告。

Jenkins+Ant+JaCoCo的代码覆盖率集成实践的更多相关文章
- jenkins+ant+jmeter实现自动化集成(详解)
jenkins+ant+jmeter实现自动化集成 for window 一.jmeter 1.jmeter安装 二.ant 1.ant安装 三.ant运行 jmeter脚本 1.配置 四.jenki ...
- jenkins+ant+jmeter搭建持续集成的接口测试平台
一.jemter接口脚本的编写步骤如下: 1. 编写接口请求 通过录制或者查看接口文档,编写接口请求,进行调试,确保接口调试通过,对于http的请求来说,就是正确的填写域名,查询字符串,查询参数等信息 ...
- Jenkins+Ant+Jmeter搭建持续集成的接口测试平台(转)
一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...
- 【转】Jenkins+Ant+Jmeter搭建持续集成的接口测试平台
一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...
- 【接口测试】Jenkins+Ant+Jmeter搭建持续集成的接口测试平台
参考文档: http://www.cnblogs.com/liuqi/p/5224579.html
- jenkins, ant, pmd持续集成
http://pmd.sourceforge.net/pmd-5.0.3/ant-task.html 在jenkins , ant , pmd进行集成的时候,build.xml模板如下,在网上找了一些 ...
- Jenkins+ANT+SVN快速搭建持续集成环境
伟大的语言都从helloworld开始,这里我们用Jenkins+ANT+SVN来搭建这一套持续集成环境. 环境准备: 一台已经配置好Jenkins和Ant的机器. 项目准备: 用Ecplise建立一 ...
- 基于Jenkins Pipeline的ASP.NET Core持续集成实践
最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署效率,因此这里总结一下. 一.关于持续集成与Jenkins Pipelin ...
- jmeter --- 搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)
jmeter --- 搭建持续集成接口测试平台(Jenkins+Ant+Jmeter) 一.环境准备: 1.JDK:http://www.oracle.com/technetwork/java/jav ...
- Jenkins+Ant+Git+Jmeter实现持续集成
个人记录: 基本的配置与Jenkins+Ant+SVN+Jmeter实现持续集成的配置一样,主要在Jenkins的配置上的区别会有所不同 安装的插件: enkins安装好之后,需要为其安装gitlab ...
随机推荐
- python 自动下载 moudle
import sys,re,subprocess import os from subprocess import CalledProcessError new_set = set() ls = se ...
- vue父组件向子组件传递一个对象,使用一个对象绑定多个 prop
如果你想要将一个对象的所有属性都当作 props 传入,你可以使用没有参数的 v-bind,即只使用 v-bind 而非 :prop-name.例如,这里有一个 post 对象: export def ...
- k8s之基础篇
相关概念: kube-apierver: 控制平面组件,负责kubernetes api, 处理接受的请求工作 kube-controller-manager: 控制平面组件, 负责运行控制器进程 k ...
- Tornado框架之异步与WebSocket(五)
知识点 理解同步与异步执行过程 理解异步代码的回调写法与yield写法 Tornado异步 异步Web客户端AsyncHTTPClient tornado.web.asynchronous torna ...
- moectf2023的一些题
[moectf]GUI 这是一道win32窗口程序 找到线程的回调函数 sub_740C94这个函数里有很多函数,意义不明,实际并不会对输入的字符串做出改变 回调函数里下断点,然后单步动调 sub_7 ...
- \r,\n,\r\n的前世今生
前情 最近在逛论坛的时候遇到有人在提问题,为什么\n在苹果手机上不换行,我以前有网上看到过文章,是因为各系统的解析不同,需要使用\r\n来做兼容,自己虽然知道怎么解决,但是不知具体原因,今特来详细了解 ...
- SQLServer使用STUFF-for xml path实现结果行列转置
源数据: 场景1: 查出用户的爱好,并进行行列转置 select cname, stuff((select ','+f.favor from tb_favor f where f.userid=b.u ...
- 在docker中使用主机串口通讯
在进行软件docker化的过程时,很大的一个阻碍就是软件与各种外围硬件设备的交互,网口通信的设备能够很容易地接入容器,但是串口设备则要复杂一些.本文讨论在windows和linux下docker容器使 ...
- Spring Boot轻松理解动态注入,删除bean
原文地址:http://412887952-qq-com.iteye.com/blog/2348445 我们通过getBean来获得对象,但这些对象都是事先定义好的,我们有时候要在程序中动态的加入 ...
- Qt编写安防视频监控系统53-串口配置
一.前言 视频监控系统中,除了核心的显示实时视频以外,可能还需要配合串口网络通信之类的,用于通过指令数据收到和硬件交互,比如机器人监控系统中,除了实时显示机器人移动监控画面以外,还通过多个串口和下面的 ...