需要准备如下材料:
- Jenkins机器上的ant安装,构建时采用ant构建
- Jenkins安装插件Record JaCoCo coverage report
- 被统计的源码文件
- 被统计的源码编译后的文件
- 在启动应用时加入参数
java -javaagent:jacocoagent.jar=includes=*,classdumpdir=classes,output=tcpserver,port=6888,address=127.0.0.1
- 进入下载的JaCoCo的zip文件中,路径jacoco-0.8.2\doc\examples\build下有ant构建时所需的build.xml文件,文件注释如下:(详细其他参数请参考:https://www.eclemma.org/jacoco/trunk/doc/ant.html)
<?xml version="1.0" ?>
<project name="wlytest" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">
<!--JaCoCo的安装路径-->
<property name="jacocoantPath" value="./jacoco-0.8.2/lib/jacocoant.jar"/>
<!--最终生成.exec文件的路径,JaCoCo就是根据这个文件生成最终的报告的-->
<property name="jacocoexecPath" value="/root/.jenkins/workspace/root/.jenkins/jobs/wlytest-JaCoCo/jacoco.exec"/>
<!--生成覆盖率报告的路径-->
<property name="reportfolderPath" value="/root/.jenkins/workspace/root/.jenkins/jobs/wlytest-JaCoCo/report/"/>
<!--远程tomcat服务或者应用的ip地址-->
<property name="server_ip" value="127.0.0.1"/>
<!--前面配置的远程tomcat服务或者应用打开的端口,要跟上面配置的一样-->
<property name="server_port" value="6888"/>
<!--源代码路径-->
<property name="checkOrderSrcpath" value="/root/.jenkins/workspace/root/.jenkins/jobs/wlytest-JaCoCo/trunk/wlytest/" />
<!--.class文件路径-->
<property name="checkOrderClasspath" value="/root/.jenkins/workspace/root/.jenkins/jobs/wlytest-JaCoCo/wlytest/WEB-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="gbk">
<fileset dir="${checkOrderSrcpath}" />
</sourcefiles>
</group>
</structure>
<html destdir="${reportfolderPath}" encoding="utf-8" />
</jacoco:report>
</target>
</project>
以上配置关注路径问题。
Jenkins配置任务
重点关注构建步骤和构建后的步骤:
构建后操作可视情况修改,以上完成。
效果
后话:不是统计完就完事了,还有根据统计后的结果补充测试用例,提升覆盖率。当然也不是覆盖率很高就完事了,因为统计的是按代码行去统计,只表示执行过该路径而已。