JaCoCo关于on-the-fly模式的使用记录
来源:互联网 发布:陈浩筹码分布源码公式 编辑:程序博客网 时间:2024/05/16 07:55
JVM中通过-javaagent参数指定特定的jar文件启动Instrumentation的代理程序,代理程序在通过Class Loader装载一个class前判断是否转换修改class文件,将统计代码插入class,测试覆盖率分析可以在JVM执行测试代码的过程中完成。(摘取自https://testerhome.com/topics/5329)
首先我们需要两个jar包。jacocoagent和jacocoant。所有关于jacoco的包都可以去http://www.jacoco.org/jacoco/下载
jacocoagent:运行时启动tcp服务监控代码覆盖,dump出覆盖率数据
jacocoant:jacoco的任务是ant驱动的。所以这个包用来执行jacoco的任务,向tcp服务发送请求,如ant dump命令生成exec文件。
接着就是插桩了,我这里是一个单独的jar包,所以直接在原来启动jar的命令中增加:
-javaagent:/home/test/JaCoCo/jacocoagent.jar=output=tcpserver,port=8893,address=本机IP
- output:输出覆盖率数据的方式,tcpserver的意思就是开启一个tcp服务,动态监控覆盖率数据。用这种方式可以不停止服务就能动态dump覆盖率数据。否则就需要kill掉服务才能统计覆盖率了
- port:tcp服务的端口号
- address:tcp服务的ip地址,一般是本机地址(摘取自https://testerhome.com/topics/5329)
完整的命令:
nohup $JAVA_HOME/bin/java-javaagent:/home/test/JaCoCo/jacocoagent.jar=output=tcpserver,port=8893,address=本机IP -jar xxx.jar --spring.cloud.config.profile=test --server.port=9401 --spring.application.index=0 &
插桩之后,再跑一下测试场景,就可以试试生成exec文件了
先下载ant了,在centos下面,直接yum install -y ant即可,安装完后,直接ant -version看成功了没
接着要生成build.xml文件,执行ant命令时,要确保build.xml文件再同一个路径下,ant相关的知识可以百度一下
下面是build.xml的具体内容:
<?xml version="1.0" ?>
<project name="Lengyu" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">
<!--Jacoco的安装路径-->
<property name="jacocoantPath" value="/home/test/JaCoCo/jacocoant.jar"/>
<!--最终生成.exec文件的路径,里面有覆盖率数据,Jacoco就是根据这个文件生成最终的报告的-->
<property name="jacocoexecPath" value="/home/test/JaCoCo/jacoco.exec"/>
<!--生成覆盖率报告的路径-->
<property name="reportfolderPath" value="/home/test/JaCoCo/coverage/"/>
<!--服务的ip地址-->
<property name="server_ip" value="127.0.0.1"/>
<!--前面配置的服务打开的端口,要跟jacocoagent一样-->
<property name="server_port" value="8893"/>
<!--源代码路径-->
<property name="coreSrcpath" value="/home/test/source_code/subscribe-service/core/src/main/java" />
<property name="commonSrcpath" value="/home/test/source_code/subscribe-service/common/src/main/java" />
<property name="apiSrcpath" value="/home/test/source_code/subscribe-service/api/src/main/java" />
<!--.class文件路径-->
<property name="checkOrderClasspath" value="/home/test/source_code/subscribe-class/BOOT-INF/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="utf-8">
<fileset dir="${coreSrcpath}" />
<fileset dir="${commonSrcpath}" />
<fileset dir="${apiSrcpath}" />
</sourcefiles>
</group>
</structure>
注意上面的源码路径和.class文件路径都是可以有多个的,对应着<classfiles>和<sourcefiles>中的配置,曾经遇到过在report中有显示相关的类和方法但没有源码,是因为源码的路径不对,程序不会自己一级级去找对应的java文件,以这里为例就要指向到scr/main/java下面。
build.xml文件创建之后,使用命令ant dump生成exec文件(要确保jacocoagent服务是开启的),里面包括了代码覆盖的信息,接着直接ant report,根据exec文件生成代码覆盖率报告
- JaCoCo关于on-the-fly模式的使用记录
- Beta Testing On The Fly
- 做一只墙上的苍蝇(a fly on the wall)
- Applying on-the-fly transformation in SharpMap
- on the fly 到底几个意思
- jacoco的maven插件使用
- jacoco的maven插件使用
- Retrieve the Windows 7 Password Hash on the Fly
- Ext.fly方法的使用
- Linux on-the-fly kernel patching without LKM
- Linux on-the-fly kernel patching without LKM
- On-the-fly Encryption with TrueCrypt --快速加密
- Changing a process’ file descriptor on the fly
- MultiRace-Efficient on-the-fly data race detection
- Creating ADF BC View Object Instances On The Fly!!!!!!
- 單元測試覆蓋率工具JaCoCo的使用介紹
- ruby on rails fly
- Create Snazzy Web Charts and Graphics On the Fly with the .NET Framework
- JAVA邮箱验证重要代码
- 使用java email 进行邮箱验证
- Axure RP 8.0.0.3312可用注册码
- nodejs 10 nodejs的web应用-文字直播实例
- 动态增加删除Table中的行
- JaCoCo关于on-the-fly模式的使用记录
- 利用git上传项目到github
- SUSE 搭建GIT服务
- String、StringBuffer、StringBuilder区别
- 画弧
- Codeforces 852B Neural Network country
- Mutations|FreeCodeCamp
- 二位数组中的查找
- 关于微信小程序循环以及嵌套循环的总结