java 代码覆盖率_代码覆盖率统计

7447065f16b12263d62c7a58e2453c48.png

不管是否在项目中起着持续、有效的作用,代码覆盖率统计已经成为各产品组必备的工具。凭借丰富的覆盖率度量维度、灵活的数据管理与报告过滤方案和良好的工具支持,Jacoco成为部门内部技术成熟,使用广泛的工具。

Jacoco可以嵌入到Ant、Maven中,提供了EclEmma Eclipse插件,也可以使用Java Agent技术监控Java程序;另外还有很多第三方工具支持Jacoco集成,如sonar、Jenkins、IDEA。Jacoco用法并不复杂但其灵活的应用方式,想要与不断更新的项目环境良好的适配工作,还是需要我们花一些时间来了解它,找到最佳使用方式。

4e57db3c6d886b9062eb52715a24d19d.gif

下面介绍一个基于当前内部主流技术平台(omad、jenkins、sonar)的代码覆盖率统计实施方案:

NetJaco是一个集成工具包,采用Jacoco Ant Tasks+Java Agent的工作方式,工具包含下面几个部分:

b1b8344ee780c3f122323ad5cc259c03.png

图1.NetJaco工具包

【Java Agent】为了有更好的可用性和独立性,NetJaco选择Java Agent插桩的工作方式与源码解耦,并且不依赖第3方工具,降低了维护成本。

【ant】现在大部分Java项目通过maven管理,Jacoco的maven plug-in同样可以很好支持maven项目,但是其配置相对复杂,并且需要需要修改源代码的pom.xml,这可能会招致开发同事的反对,也使没有源码权限的测试难行寸步难行。所以需要ant架包为Jacoco Ant Tasks提供支持。

【Jacocoant】、【Sonar-ant-task】、【Jacocoagent】架包。

【build-jacoco.xml】基于ant tasks的jacoco执行脚本,默认已提供了merge,backup,delete,dump等功能已经能满足大部分使用场景。

【build-sonar.xml】sonar条用脚本,基于ant tasks。代码覆盖率统计分析,上传到sonar服务器并展示。

d04b21a2083ef9b7ee86922140cd714f.png

图2.NetJaco工作示例

fa16289c6bc39b43479901dc1a4ff68d.gif

如何实施?

1.将Java Agent上传到应用服务器

Jacoco有两大模块,Jacocoagent和Jacocoant。测试服务器上开启tcp端口,Jacocoagent 注入 JAVA_OPTS, 监听整个测试过程, 记录测试覆盖的数据。

而Jacocoant作为客户端可以配置在本地, 通过发送请求,将jacocoagent 监控到的数据,都写入.exec 文件, 而对源码与class文件进行分析比较,生成测试覆盖率文件、映射源码得出测试报告等。

e6c5a67ff458be5d284dfcd5bff312a2.gif

2.修改tomcat启动参数,重启服务让jacocoagent开始工作

修改应用对应tomcat的启动文件:

JAVA_OPTS="$JAVA_OPTS -javaagent:/home/print/ wwwroot/ jacoco/lib /jacocoagent.jar=includes=com.netease.*,output= tcpserver,port=21005,address=*"

通过omad部署的项目则修改实例的JVM参数,示例如下:

85dbad9cb7c82c7bd06ea5919bfc1ad3.png

增加jacocoagent.jar在服务器上的实际路径,includes指项目应用所在的包路径,output选择tcpserver。address用*号则可以用ip和服务器名来访问,最后同一台服务器上的应用需要注意port的唯一性。

重启该服务,通过检查端口是否被调用来检查jacoco是否在工作:

8194c7ecf8cf00fe9fdc9206a9a800ba.png

至此Jacoco已经开始通过agent来监控文件执行的覆盖率数据,这些数据被保存在各服务的内存中,JVM退出时数据释放,我们需要在tomcat停止或重启前将监控的数据dump出来。

8235c1dc742c2c913557357ef3af1128.gif

3.配置build-jacoco.xml,收集代码覆盖率监控数据

如图2所示,覆盖率统计任务触发以及与sonar平台的对接工作由jenkins来执行。将NetJaco工具包下载到jenkins slave上,同时该机器上需要一份项目的源码用于覆盖率分析。

前面提到build-jacoco.xml已经默认提供jacoco merge,dump,delete,backup功能,针对项目的个性化配置需要关注下面几个值:

 # basedir指向jenkins job的workspace目录

 #tool_dir指向NetJaco工具包

源码、代码编辑后文件以及应用所在服务器和port口配置示例如下:

mainsite_web = {"codedir":"/****/mainsite-web",\ #该应用源码所在的路径

"webroot_dir":"/home/qafunc/coderepo/*****/mainsite-web/target/vstore",\ #该应用源码编译后,class文件所在的路径

"server_ip":"classb-*****.server.163.org",\ #该应用实例所在的服务器地址

"server_port":"21005"} #jacoco监控该应用所用的port号

4990b518aef40bfa1bf91ed11169bde4.gif

4.配置build-snoar.xml,执行覆盖率统计分析。

工具包提供了执行覆盖率统计分析的sonar ant脚本模板build-snoar.xml,大部分配置都可以重用,需要注意的个性化配置项如下:

 #当前部门的公用sonar服务器地址

 #指向NetJaco工具包sonar ant架包所在路径

 #sonar上生成的项目名称

 #jenkins 节点机上应用的源码地址

 # jenkins节点机上源码编译后文件所在地址

eec212d28d1b0913388b4e3daaf6bed9.gif

5.执行jenkins job dump应用服务器上的覆盖率数据,然后调用sonar服务进行覆盖率分析。

配置一个jenkins job用来触发jacoco请求。

9255bce39de99a7ed28e6a72ab13a760.png

793b8c3d1fe9f375cab6f1f786c63b02.png

30f24aa7699c479063d873ac0eaed022.gif

6.查看统计结果

ec09bb450b265bcb68a1eb7c432b9368.png

以上几步就是NJaco的完整操作说明。已经在项目上进行了实践,应用和tomcat数量众多的状况并没有增加太多的工作量,足见其可用性。

关于如何更好的应用sonar的覆盖率统计报告?给产品测试带来实际指导意义,是一个可以深挖的议题。希望大家以后继续讨论。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值