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) 编辑 收藏 举报