jenkins+jacoco+ant自动化代码和应用服务代码分离场景获取远程服务的覆盖率

前提

自动化代码和应用服务代码分离。jenkins和tomcat服务器分离

思想

1.在tomcat启动javaagent监听。

2.运用其他job_B已部署的应用服务代码

3.拉取自动化代码,开始测试

4.测试完成后,调用ant,生成覆盖率的exec文件

5.拉取应用服务代码到当前job_a的workspace

6.使用jacoco coverage report统计覆盖率

步骤

 

1.jenkins安装插件

JaCoCo plugin

2.进入系统管理,配置maven和ant

3.新建maven风格的job

4.自动化测试代码git配置

5.build输入clean test

6.执行shell

cd /Users/qiaojiafei/.jenkins/workspace/qingzhutool
git pull
mvn compile

7.调用ant,targets输入dump,ant的配置文件如下:

复制代码
<?xml version="1.0" ?>
<project name="qjf" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">
  <property environment="env"/>
    <!--JaCoCo的安装路径-->
  <property name="jacocoantPath" value="/Users/qiaojiafei/Documents/work/soft/jacoco-0.8.3/lib/jacocoant.jar"/>
  <!--最终生成.exec文件的路径,JaCoCo就是根据这个文件生成最终的报告的-->
  <property name="jacocoexecPath" value="/Users/qiaojiafei/.jenkins/workspace/${env.JOB_NAME}/jacoco.exec"/>
    <!--生成覆盖率报告的路径-->
  <property name="reportfolderPath" value="/Users/qiaojiafei/.jenkins/workspace/${env.JOB_NAME}/report/"/>
  <!--远程tomcat服务或者应用的ip地址-->
  <property name="server_ip" value="127.0.0.1"/>
  <!--前面配置的远程tomcat服务或者应用打开的端口,要跟上面配置的一样-->
  <property name="server_port" value="6300"/>
  <!--源代码路径-->
  <property name="checkOrderSrcpath" value="/Users/qiaojiafei/.jenkins/workspace/${env.JOB_NAME}/qingzhutool" />
  <!--.class文件路径-->
  <property name="checkOrderClasspath" value="/Users/qiaojiafei/.jenkins/workspace/qingzhutool/target/classes" />

  <!--让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>
  
  <!--JaCoCo任务:
      根据前面配置的源代码路径和.class文件路径,
      根据dump后,生成的.exec文件,生成最终的html覆盖率报告。-->
  <target name="report">
      <delete dir="${reportfolderPath}" />
      <mkdir dir="${reportfolderPath}" />
      
      <jacoco:report>
          <executiondata>
              <file file="${jacocoexecPath}" />
          </executiondata>
              
          <structure name="JaCoCo Report">
              <group name="Check Order related">           
                  <classfiles>
                      <fileset dir="${checkOrderClasspath}" />
                  </classfiles>
                  <sourcefiles encoding="gbk">
                      <fileset dir="${checkOrderSrcpath}" />
                  </sourcefiles>
              </group>
          </structure>

          <html destdir="${reportfolderPath}" encoding="utf-8" />         
      </jacoco:report>
  </target>
</project>
复制代码

 

8.再次执行shell

复制代码
#cp /Users/qiaojiafei/.jenkins/workspace/jacocotesttool/jacoco.exec /Users/qiaojiafei/.jenkins/workspace/qingzhutool/
rm -rf qingzhutool
ls
git clone git@192.144.141.166:qingzhuhotel/qingzhutool.git
cd qingzhutool
git checkout master
git pull
#cp /Users/qiaojiafei/.jenkins/workspace/qingzhutool/jacoco.exec ./
mvn compile
复制代码

9.最后构建后添加record jacoco coverage report

 总体配置图如下

 

posted on   乔叶叶  阅读(2101)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示