kimber_kimber

导航

java---代码覆盖率统计工具

1. 统计工具分类

jacoco ---开发语言是java 的代码覆盖率统计工具

coverage---开发语言是python 的代码覆盖率统计工具

2.jarcoco 统计

  覆盖率计数器   java counter 

  •   行覆盖
  •   类覆盖
  •   分支覆盖
  •   方法覆盖
  •   指令覆盖
  •   圈覆盖

3.原理

jacoco的原理是通过在ByteCode时使用的ASM技术修改字节码文件或者使用自定义类加载器,在字节码中特定位置插入桩,运行字节码文件输出覆盖信息文件,然后根据文件分析计算得出覆盖率数据,生成可视化html文件

简单来说就是:jacoco 自己写了一个class loader  ,在执行的时候咋class 的不同位置上加上类似 system.out.print('XXX')  这种代码,如果执行了这些代码,jacoco 就知道附近的代码别执行到了,那么久认为这部分被覆盖到了

 

4.统计方式

  支持统计本地服务的覆盖率----单元测试:jacoco maven 插件完成----off line 模式----单元测试

  支持远程服务的代码覆盖率----功能测试:jacoco java agent 实现----on the fly 模式----集成测试

 

 

5.实现方式,

  on the fly 模式 

  原理:以tcpserver 方式进行插桩: 

  实现方式:

  1)在当前的启动服务中,在一个端口{$port} 上,开启一个tcp 服务,用来一直接受jacoco 的执行覆盖率信息并传到这个tcp 服务上进行保存

  2)以API的形式连接到这个tcp 服务上,并进行覆盖率数据的dump操作

    操作 

  1.下载jacoco 的安装包,lib 下会包含 jacocoagent jar包 和jacococli.jar 包  放在一个jarcoco test的文件目录下

  2.打包被测程序 生成一个testdemo 文件,文件中包含新创建的jarcocotest 目录

  3.执行java 命令启动程序,命令中指定 使用的jar包和 传输数据的端口和服务IP  命令格式如下:

java  -javaagent:D:\wechat\jacoco-0.8.5\lib\jacocoagent.jar=output=tcpserver,address=*,port=8888,append=true -jar 项目路径

  4.开始测试吧

  5.测试结束了,导出数据吧,将测试结果数据生成一个exec 文件:

java -jar jacococli.jar dump --address 127.0.0.1 --port 8888 --destfile /dump.exec

  6 生成html 以及xml 报告:

  java -jar D:\java\jacoco-0.8.6\lib\jacococli.jar  report .\report\res.exec   --classfile  ..\target\classes\com  --sourfile   [path]   --html [path \report.xml]

 

 

6.基于jenkins 实现 

  https://jenkins-zh.cn/wechat/articles/2019/05/2019-05-22-jacoco-coverage-for-functional-test/

 

  https://www.shuzhiduo.com/A/kvJ3yjEgdg/   参考此文档进行jacoco 的jenkins 集成 

      首先需要在jenkins 上有jacoco pluin 的插件

  之后创建job  

  设置pre steps  

  关联git,构建 

  构建后的命令 

  构建后的操作添加一个record jacoco coverage report  (里面的参数可以使用默认的)生成了html 文件

  

 

  

posted on 2021-08-11 17:46  kimber_kimber  阅读(1573)  评论(0编辑  收藏  举报