首先,要把jacoco的jacocoagentjar包放到部署应用的服务器上,接着在系统服务的JAVA_OPTIONS 后面添加如下参数:
1
-javaagent:[yourpath/]jacocoagentjar=includes=comxxxxxx,output=tcpserver,address=xxxxxxxxxxxx,port=xxxxx
参数解释:
前面的yourpath是放jacocoagentjar文件的目录路径;
includes是指要收集哪些类(注意不要关写包名,最后要写),不写的话默认是,会收集应用服务上所有的类,包括服务器和其他中间件的类,一般要过滤;
output有4个值,分别是file,tcpserver,tcpclient,mbean,默认是file。使用file的方式只有在停掉应用服务的时候才能产生覆盖率文件,而使用tcpserver的方式可以在不停止应用服务的情况下下载覆盖率文件,后面会介绍如何使用dump方法来得到覆盖率文件。
address是ip, port是端口,这是使用tcpserver方式需要的2个参数,也是后面dump方法要用到的。(这里的address我只能使用服务器的ip,如果使用其他ip,服务启动时会报错。)
更多参数可以参考java agent。
配置完应用服务的JAVA_OPTIONS之后,启动服务器,然后可以开始跑你的集成测试,跑完之后,实际上jacocoagent已经将覆盖率数据记录下来了,我们可以使用下面的ant任务来dump出覆盖率文件:
buildxml
1 2 3
<target name="downloadUatCoverageData"> <jacoco:dump address="xxxxxxxxxxxx" port="xxxx" reset="true" destfile="${basedir}/uatexec" append="false"/> </target>
这里的address和port是刚才在JAVA_OPTIONS里面写的address和port的值,destfile是指生成的覆盖率文件路径。
注意,这里虽然得到了集成测试的覆盖率文件,但是需要应用服务器上的类文件才能产出相应的覆盖率报告,如果类文件是其他JVM编译的,产出的报告覆盖率是0%。
有2种方法可以得到覆盖率文件所需的class文件:
将应用服务部署的包(ear或war或jar)包下载下来之后解压,即可得到对应的class文件;
在前面做单元测试之后,可以将class文件打成一个zip包,然后上传到服务器,最后在需要的时候去服务器上取。
得到集成测试的覆盖率文件之后,结合之前取到的单元测试覆盖率文件,我们可以将2个文件合并,得到综合的覆盖率文件,命令如下:
buildxml
1 2 3 4 5
<target name="mergeCoverage"> <jacoco:merge destfile="mergedexec"> <fileset dir=软件安装
Ant
Jacoco
远程Tomcat服务配置
1:sh shutdownsh先关闭tomcat服务。
2:修改bin/catalinash中JAVA_OPTS的配置。
# -javaagent: 的后面跟jacoco的安装路径
# includes= 选项,选择你要覆盖率的服务
# port= 选项,选择你要打开的端口
# address= 选项,tomcat服务所在机器的ip地址(如果想在跟tomcat服务同一台机器上执行ant任务的话,需要改为127001)
JAVA_OPTS="-javaagent:/path/to/your/jacoco_064/lib/jacocoagentjar=includes=combaidu,output=tcpserver,port=8893,address=10811477"
3: sh startupsh重新启动tomcat服务。
如果发现启动主程序异常,那么在JAVA_OPTS 配置中国再加一项-Xverify:none
JAVA_OPTS="-javaagent:/path/to/your/jacoco_064/lib/jacocoagentjar=includes=combaidu,output=tcpserver,port=8893,address=10811477 -Xverify:none"
本地Ant任务配置
配置buildxml。
<xml version="10" >
<project name="Lengyu" xmlns:jacoco="antlib:orgjacocoant" default="jacoco">
<!--Jacoco的安装路径-->
<property name="jacocoantPath" value="/home/work/software/jacoco_064/lib/jacocoantjar"/>
<!--最终生成exec文件的路径,Jacoco就是根据这个文件生成最终的报告的-->
<property name="jacocoexecPath" value="/home/work/local/hudson_home/workspace/wg_merchant_oc_regression/jacocoexec"/>
<!--生成覆盖率报告的路径-->
<property name="reportfolderPath" value="E:/Libs/coverage_ant_task/report/"/>
<!--远程tomcat服务的ip地址-->
<property name="server_ip" value="10811477"/>
<!--前面配置的远程tomcat服务打开的端口,要跟上面配置的一样-->
<property name="server_port" value="8893"/>
<!--源代码路径-->
<property name="checkOrderSrcpath" value="E:/Src/ordercenter/ordercenter-biz/src/main/java/" />
<!--class文件路径-->
<property name="checkOrderClasspath" value="E:/Src/ordercenter/ordercenter-biz/target/classes/com/baidu/ordercenter/service/Impl" />
<!--让ant知道去哪儿找Jacoco-->
<taskdef uri="antlib:orgjacocoant" resource="org/jacoco/ant/antlibxml">
<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>
生成覆盖率报告
执行ant dump。成功的话,应会有如下输出。
[work@st01-ecom-jn2st01baiducom ant]$ ant dump
Buildfile: /home/work/local/hudson_home/workspace/wg_merchant_oc_regression/ant/buildxml
dump:
[jacoco:dump] Connecting to /10811477:8893
[jacoco:dump] Dumping execution data to /home/work/local/hudson_home/workspace/wg_merchant_oc_regression/jacocoexec
BUILD SUCCESSFUL
Total time: 0 seconds
最后执行ant report。jacoco就会在你指定的路径生成覆盖率报告了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)