Jacoco统计Tomcat服务的测试代码覆盖率

一、官方文档
http://www.eclemma.org/jacoco/trunk/doc/
http://www.eclemma.org/jacoco/trunk/doc/agent.html
JaCoCo同时支持on-the-fly和offline的两种插桩模式。

1、On-the-fly插桩:
JVM中通过-javaagent参数指定特定的jar文件启动Instrumentation的代理程序,代理程序在通过Class Loader装载一个class前判断是否转换修改class文件,将统计代码插入class,测试覆盖率分析可以在JVM执行测试代码的过程中完成。

2、Offline模式:
在测试前先对文件进行插桩,然后生成插过桩的class或jar包,测试插过桩 的class和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告。

3、On-the-fly和offline比较:
On-the-fly模式更方便简单进行代码覆盖分析,无需提前进行字节码插桩,无需考虑classpath 的设置。
存在如下情况不适合on-the-fly,需要采用offline提前对字节码插桩:
(1) 运行环境不支持java agent。
(2) 部署环境不允许设置JVM参数。
(3) 字节码需要被转换成其他的虚拟机如Android Dalvik VM。
(4) 动态修改字节码过程中和其他agent冲突。
(5) 无法自定义用户加载类。

二、下载jacocoagent.jar
http://www.eclemma.org/jacoco/index.html
将其放在测试服务器的任意目录下,例如:/data/ATFC

三、Tomcat配置jacoco
1、在被测应用的tomcat目录下创建jacoco子目录,
例如:/data/dt.metadata_manager/jacoco

2、切换到bin目录下修改配置文件catalina.sh的修改JVM启动参数,
参数说明:
a、includes的参数为要监控覆盖率的包,多个的话用冒号分割
b、output覆盖率数据输出的形式,有file, tcpserver, tcpclient, 默认是file,file是在jvm停掉时才将覆盖率数据dump出来
c、address和port可以提供client访问,并dump出覆盖率数据文件, 在build.xml会使用,$(hostname)自动动态获取运行服务器上host,不需修改

JAVA_OPTS="$JAVA_OPTS  -javaagent:/data/ATFC/jacocoagent.jar=includes=com.mainclass1.*:com.mainclass2.*
,output=tcpserver
,address=10.210.230.26,port=8335
,classdumpdir=/data/dt.metadata_manager/jacoco"

3、重启tomcat使配置生效
ps -ef |grep java
重启后发现 -javaagent 表示配置已成功

你可能感兴趣的:(Jacoco统计Tomcat服务的测试代码覆盖率)