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 表示配置已成功

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,869评论 18 139
  • 白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是...
    yongliu1229阅读 2,803评论 0 4
  • title: Android AOP之字节码插桩author: 陶超description: 实现数据收集SDK时...
    陶菜菜阅读 38,249评论 40 182
  • webapi 服务器地址:http://dev.nbeport.com/aps/rest/ 1.公司管理 获取Li...
    baggio555阅读 258评论 0 0
  • 这是我初到学校的时候校园的苍翠,那时的我,对所有的事物好奇,对所有的人都热情,毫无防备。就是在这盛夏的结尾里,我...
    Y樹阅读 499评论 2 0