这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战
单测的时候如何知道覆盖到了多少代码?jacoco就是个很不错的代码覆盖率统计框架。一起来学习一下吧。
我的学习顺序:
1、jacoco基本知识、底层原理和简单应用
2、如何获取增量代码
3、jacoco二开-支持增量代码覆盖率报告
4、super-jacoco:增量代码覆盖率平台化项目
jacoco基础
1、On-the-fly
JVM通过-javaagent这个参数开启一个代理程序,代理程序在装载class文件前判断是否已经转换修改了该class文件,最后统计转换的文件得到覆盖率。
Jacoco通过ASM在字节码中插入探针,每个探针都是一个布尔变量(true表示执行、false表示没有执行),程序在运行时可以改变指针结果,最后统计探针的数量来统计代码执行情况。
.exec文件:一个二进制文件,里面有探针的覆盖执行信息,用于生成报告。
一、jacoco应用-ant方式(全量代码)
简述:jacoco中有javaant的jar包,支持ant命令去执行结果。
1、前期准备
【ant】
下载安装
/Users/mac/apache-ant-1.10.11
配置环境变量
export ANT_HOME=/Users/mac/apache-ant-1.10.11
export PATH={ANT_HOME}/bin
【jacoco】
源码下载,主要是cli包、ant包和agent包。
【jdk】
安装、配置环境变量
2、配置测试项目的启动项
设置ip和端口,用到agent包
在启动的时候加上这句命令
-javaagent:/Users/mac/jacoco-0.8.7/lib/jacocoagent.jar=includes=*,output=tcpserver,address=127.0.0.1,port=6300,append=true
或者 在环境变量配置中加上这句
export JACOCO="-javaagent:/Users/mac/jacoco-0.8.7/lib/jacocoagent.jar=**includes=*,**output=tcpserver,address=127.0.0.1,port=6300,append=true"
export JAVA_OPTS="$JACOCO":"$JAVA_OPTS"
3、ant的.xml文件配置
创建build.xml文件,放在ant的bin目录下。
参考往期文章:jacoco+springboot代码覆盖率实践
4、启动被测试服务,执行ant命令
cd /Users/mac/apache-ant-1.10.11/bin //build.xml文件所在的目录
source ~/.bash_profile //生效ant
ant dump
ant merge
ant report //在jacoco指令中需要用到被测试服务的源码路径
5、解读代码覆盖率报告
Jacoco报告层级:包>类>方法
Instructions-代码指令
红色代表未覆盖,绿色代表已覆盖,Cov 为总体覆盖率。
300/400 25% 未覆盖300条指令/总400条指令 覆盖率25%
Branches-分支
分支用菱形标示。
switch,while,for,if 语句代表分支,Assert、Boolean也会被定义为分支,判断语句都会被定义为分支。
红色菱形:覆盖为0 黄色菱形:未完全覆盖 绿色菱形:完全覆盖
方法/类
方法、类完全没有指令执行,未覆盖,有一行指令被执行,代表完全覆盖。
今天到这,下篇继续👉