jacoco集成测试覆盖率(ant)

背景:

        日常版本测试过程中,由于只有接口和功能测试;版本上线后,发现会有一些小bug遗漏;也会有困惑,测试过程阶段已经测试的很仔细了,就想统计一下测试阶段,场景用例对开发代码的覆盖率是多少。因为我们后端代码是java写的,所以选用了jacoco;使用的是jacocoagent+ant方式;我们的后端项目介绍:springboot项目+jenkins打包+自研的工具部署

实战步骤

1、在需要统计覆盖率的远程服务器上,部署下载的 zip 包;

1)本来想用wget +url方式下载结果不支持,就想下载到本地;然后通过scp传到远程服务器

scp /Users/shifangfang/ydh-apk/remotecontent?filepath=org%2Fjacoco%2Fjacoco%2F0.8.3%2Fjacoco-0.8.3.zip [email protected]:/home/jacoco/

2)解压缩zip包

unzip remotecontent?filepath=org%2Fjacoco%2Fjacoco%2F0.8.3%2Fjacoco-0.8.3.zip

2、修改远程服务器上启动脚本;

1)以防出错,先备份一下启动脚本

2)停止当前启动的tomcat服务

3)在备份的启动脚本starup_bak.sh中添加参数;

-javaagent:/home/jacoco/lib/jacocoagent.jar=includes=com.qianmi.d2p.admin.api.action.chain.*,output=tcpserver,port=8044,address=172.21.33.39 -Xverify:none

4065494-3a4cae2610af02b6.png

比如:

添加之前启动项为:

java -Xmx1024m -Xms1024m -XX:MaxMetaspaceSize=256m -XX:MetaspaceSize=64m -Xss512k -server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Duser.home=/home/tomcat -Dspring.config.location=/home/tomcat/conf/application.properties -jar /home/tomcat/bin/server.jar

添加之后启动项为:

java -javaagent:/home/jacoco/lib/jacocoagent.jar=includes=com.qianmi.d2p.admin.api.action.chain.*,output=tcpserver,port=8044,address=172.21.33.39 -Xverify:none -Xmx1024m -Xms1024m -XX:MaxMetaspaceSize=256m -XX:MetaspaceSize=64m -Xss512k -server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Duser.home=/home/tomcat -Dspring.config.location=/home/tomcat/conf/application.properties -jar /home/tomcat/bin/server.jar

参数解释:

/home/jacoco/lib/jacocoagent.jar---远程服务器上jacocoagent.jar位置

includes=com.qianmi.d2p.admin.api.action.chain.*---需要统计覆盖率的包中的文件

output=tcpserver---输出报告形式

port=8044---待测服务器上开发的代理端口

address=172.21.33.39---待测服务器(PS:如果是在 待测服务器上执行`ant dump`的话,就直接写`address=127.0.0.1`;如果不是就写待测服务器的地址)

4)启动服务,并查看jacocoagent是否启动成功

4065494-85ba6274442179f4.png

3、部署ant

ant服务器地址可以和远程被测服务器用一台,也可以分开;我是用单独的服务器

1)下载好ant包后,解压缩unzip apache-ant-1.9.14-bin.zip

2)配置环境变量vi /etc/profile

export ANT_HOME=/usr/apache-ant-1.9.14

export PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin

3)测试ant是否安装成功

[root@lin-21-4-249 ~]# ant -version

Apache Ant(TM) version 1.9.14 compiled on March 12 2019

4、将源码和远程服务器上待测的jar拷贝到ant服务器

1)上传源码到ant服务器scp d2p-admin-bff.zip [email protected]:/home/

解压缩源码:unzip d2p-admin-bff.zip

4065494-ca48ff589440653c.png

2)上传部署的jar到ant服务器,然后解压缩部署的jar包:jar xvf d2p-admin-api-web-1.18.54-RELEASE.jar

4、在ant服务器上创建build.xml文件

1)在ant安装目录/bin下创建build.xml

<?xml version="1.0" encoding="UTF-8"?>

<project name="Jacoco" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">

    <!--Jacoco 的安装路径-->

  <property name="jacocoantPath" value="/home/jacoco/lib/jacocoant.jar"/>

  <!--最终生成 .exec 文件的路径,Jacoco 就是根据这个文件生成最终的报告的-->

  <property name="jacocoexecPath" value="/home/jacoco.exec"/>

    <!--生成覆盖率报告的路径-->

  <property name="reportfolderPath" value="/home/jacoco_report"/>

  <!--远程 Tomcat 服务的 ip 地址-->

  <property name="server_ip" value="172.21.33.39"/>

  <!--前面配置的远程 Tomcat 服务打开的端口,要跟上面配置的一样-->

  <property name="server_port" value="8044"/>

  <!--源代码路径,源码和ant放置同一服务器上-->

  <property name="checkOrderSrcPath" value="/home/d2p-admin-bff/d2p-admin-api-web/src" />

  <!--.class 文件路径,部署的jar解压缩后查看待测试.class文件-->

  <property name="checkOrderClasspath" value="/home/d2p_admin_api/BOOT-INF/classes/com/qianmi/d2p/admin/api/action/chain/" />

  <!--让 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}">

                          <!-- 过滤不必要的文件 -->

                          <exclude name="**/R.class"/>

                          <exclude name="**/R$*.class"/>

                          <exclude name="**/*$ViewInjector*.*"/>

                          <exclude name="**/BuildConfig.*"/>

                          <exclude name="**/Manifest*.*"/>

                      </fileset>

                  </classfiles>

                  <sourcefiles encoding="UTF-8">

                      <fileset dir="${checkOrderSrcPath}" />

                  </sourcefiles>

              </group>

          </structure>

          <html destdir="${reportfolderPath}" encoding="UTF-8" />

          <csv destfile="${reportfolderPath}/coverage-report.csv" encoding="UTF-8"/>

          <xml destfile="${reportfolderPath}/coverage-report.xml" encoding="UTF-8"/>       

      </jacoco:report>

  </target>

</project>

5、执行测试后,下载报告

1)在ant所在的服务器bin下

ant dump

ant bulid

ant report

6、把生成的report上传到本地

1)ant所在服务器,之前build.xml中report路径为:/home/jacoco_report

2)scp /home/jacoco_report/coverage-report.xml  ~/Desktop

参考文档:https://www.jianshu.com/p/639e51c76544

 https://www.jianshu.com/p/b6a7ab72eb2d

后续在集成到jenkins上,先记录

转载于:https://www.jianshu.com/p/fe5144c63d0d

猜你喜欢

转载自blog.csdn.net/weixin_33736649/article/details/91103754