zoukankan      html  css  js  c++  java
  • 代码覆盖率统计

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

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

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

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

    图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服务器并展示。

    图2.NetJaco工作示例

     

    如何实施?

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

    NetJaco包含了Java Agent,可以用命令 git clone  https://git.hz.netease.com/git/hzdingweiwei/NetJaco.git 将工具包下载到应用服务器上。

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

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

    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参数,示例如下:

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

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

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

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

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

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

    < project name =" jacoco" basedir= "/home/qafunc/ jenkins/workspace/vstore_Jacoco_collection"  ... > # basedir指向jenkins job的workspace目录

    < property name= "tool_dir" value= "${basedir }/coverage/tools" /> #tool_dir指向NetJaco工具包

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

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

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

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

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

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

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

    < property name= "sonar.host.url" value= "http://classb-qatest38.server.163.org:9000/" /> #当前部门的公用sonar服务器地址

    < property name= "sonar_lib_dir" value= "${basedir }/coverage/tools/sonar" /> #指向NetJaco工具包sonar ant架包所在路径

    < property name= "sonar.projectName" value= "vstore " /> #sonar上生成的项目名称

    < property name= "code_dir" value= "/ home/ qafunc/coderepo/ vstore-parent/vstore -front-web/mainsite-web" /> #jenkins 节点机上应用的源码地址

    < property name= "sonar.binaries" value= "${webroot_dir}/target/classes" /> # jenkins节点机上源码编译后文件所在地址

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

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

    6.查看统计结果

    <用后感>

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

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

     

  • 相关阅读:
    input设置只能输入数字,附上手机号码验证
    vue组件传值的几种方式
    微信小程序之子组件的使用
    vue ckeditor5 高度的设置
    vue v-if与v-show的深入思考
    vue与react之间的区别
    vue打印电子面单(后台传来的html的解决方案)
    Asp.NET 与 WebApi 共享Session
    Python大数据:jieba 中文分词,词频统计
    Python大数据:信用卡逾期分析
  • 原文地址:https://www.cnblogs.com/andashu/p/6297412.html
Copyright © 2011-2022 走看看