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服务运行的基础,也是测试任务的目标对象。

三、集成实践

流程图

前置准备工作

  1. Jenkins服务器配置

  2. Jenkins插件安装
    • 在Jenkins服务器上安装HTML Publisher插件。详细步骤及离线安装方法,请查阅《Jenkins离线安装插件》以获取帮助或进行实战演练。
  3. Ant工具下载
    • 在Jenkins服务器上完成Ant工具的下载与安装流程。
  4. 工具下载
    • 在Jenkins服务器和Web服务器上,下载并准备好jacoco工具。jacoco作为代码覆盖率工具的使用详情,可参考《代码覆盖率工具之Jacoco》进行学习或实际操作。
  5. Jenkins服务器资源准备
    • 确保Jenkins服务器上已获取Web服务的java源文件class文件,以便后续构建和测试流程使用。
  6. Web服务器部署
    • 在Web服务器上,准备好Web服务的jar包,以便进行部署和发布操作。

实践步骤

在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构建脚本

  1. 创建一个名为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>
  1. 创建一个名为build.sh的Shell脚本文件,并添加以下内容,以便执行Ant构建任务:
#!/bin/sh
source /etc/profile
cd /opt/jacoco/neworiental # build.xml 文件的路径
ant dump
ant report

在Jenkins服务器上创建一个新的构建项目

  1. Build Steps中添加Execute shell步骤,并配置为执行build.sh脚本。

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

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

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

Jenkins+Ant+JaCoCo的代码覆盖率集成实践的更多相关文章

  1. jenkins+ant+jmeter实现自动化集成(详解)

    jenkins+ant+jmeter实现自动化集成 for window 一.jmeter 1.jmeter安装 二.ant 1.ant安装 三.ant运行 jmeter脚本 1.配置 四.jenki ...

  2. jenkins+ant+jmeter搭建持续集成的接口测试平台

    一.jemter接口脚本的编写步骤如下: 1. 编写接口请求 通过录制或者查看接口文档,编写接口请求,进行调试,确保接口调试通过,对于http的请求来说,就是正确的填写域名,查询字符串,查询参数等信息 ...

  3. Jenkins+Ant+Jmeter搭建持续集成的接口测试平台(转)

    一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...

  4. 【转】Jenkins+Ant+Jmeter搭建持续集成的接口测试平台

    一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...

  5. 【接口测试】Jenkins+Ant+Jmeter搭建持续集成的接口测试平台

    参考文档: http://www.cnblogs.com/liuqi/p/5224579.html

  6. jenkins, ant, pmd持续集成

    http://pmd.sourceforge.net/pmd-5.0.3/ant-task.html 在jenkins , ant , pmd进行集成的时候,build.xml模板如下,在网上找了一些 ...

  7. Jenkins+ANT+SVN快速搭建持续集成环境

    伟大的语言都从helloworld开始,这里我们用Jenkins+ANT+SVN来搭建这一套持续集成环境. 环境准备: 一台已经配置好Jenkins和Ant的机器. 项目准备: 用Ecplise建立一 ...

  8. 基于Jenkins Pipeline的ASP.NET Core持续集成实践

    最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署效率,因此这里总结一下. 一.关于持续集成与Jenkins Pipelin ...

  9. jmeter --- 搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)

    jmeter --- 搭建持续集成接口测试平台(Jenkins+Ant+Jmeter) 一.环境准备: 1.JDK:http://www.oracle.com/technetwork/java/jav ...

  10. Jenkins+Ant+Git+Jmeter实现持续集成

    个人记录: 基本的配置与Jenkins+Ant+SVN+Jmeter实现持续集成的配置一样,主要在Jenkins的配置上的区别会有所不同 安装的插件: enkins安装好之后,需要为其安装gitlab ...

随机推荐

  1. Solr学习总结-Facet

    返回查询集合中指定field的统计情况,例如找到city一样的文档数目: 加入文档 <add> <doc> <field name="id">1 ...

  2. MySQL8.0之特性

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能.下面我们将简要介绍下 MySQL 8.0 中值得关注的 ...

  3. 设计模式:可复用面向对象软件的基础 pdf电子书分享

    <设计模式:可复用面向对象软件的基础>是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶.四位顶尖的面向对象领域专家精心选取了最具价值的设计实践,加以分类整理和命名 ...

  4. NET任务调度框架Hangfire使用指南

    Hangfire 是一个开源的 .NET 任务调度框架,它允许开发人员轻松地将长时间运行的任务.定时任务和其他后台处理从主线程中分离出来,以提高应用程序的响应速度和性能 1. 安装 Hangfire ...

  5. StarBlog博客Vue前端开发笔记:(2)SASS与SCSS

    前言 本项目需要使用 SCSS 来编写页面样式. Sass (Syntactically Awesome Stylesheets)是一个 css 预处理器,而 SCSS 是 Sass 的一种语法格式, ...

  6. gradle 很棒

    一直以为 gradle 就是 maven 的一个易读版,表达上比 XML 更精简了,实际上还是maven,似乎没有存在的必要. 但是,万万没想到,这玩意儿竟然是一个语言,竟然可以调试!也就是说,它不是 ...

  7. 走向更强的 Literal 的时代

    正如 声明式编程的没落 - Inshua - 博客园 分析,声明式编程由于不符合软件工程需要,实际上正在淘汰,但与此同时,它的特征被过程式编程吸收为了Literal,中文翻译字面量. 什么是 Lite ...

  8. 使用 IntelliJ IDEA 构建 Spring Framework 5.3.21 源码问题解决

    源码版本 1.下载地址:https://github.com/spring-projects/spring-framework/tags 2.选择要构建的源码版本并下载,例如:5.3.21 相关环境 ...

  9. Linux打印显示时间

    Linux打印显示时间具体使用参数如下: 1.输出当前年月日echo $(date +%F)2.输出当前时间(时分)echo $(date +%R)3.输出当前时间(时分秒)echo $(date + ...

  10. rocketMq4.2.0启动broker报错找不到或无法加载主类 Files\Java\jdk1.8.0_101\lib\dt.jar;C:\Program]

    假如弹出提示框提示'错误: 找不到或无法加载主类 xxxxxx'.打开runbroker.cmd,然后将'%CLASSPATH%'加上英文双引号.保存并重新执行start语句.做如下图处理 但是输出还 ...