本文主要是介绍jacoco-sonarjava覆盖率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
JaCoCo插桩
On-the-fly模式中, JVM中通过-javaagent参数指定特定的jar文件启动Instrumentation的代理程序,代理程序在通过Class Loader装载一个class前判断是否转换修改class文件,将统计代码插入class,测试覆盖率分析可以在JVM执行测试代码的过程中完成。
offline模式中,在测试前先对文件进行插桩,然后生成插过桩的class或jar包,测试插过桩 的class和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告。
两种插桩比较
On-the-fly和offline比较:
On-the-fly模式更方便简单进行代码覆盖分析,无需提前进行字节码插桩,无需考虑classpath 的设置。
存在如下情况不适合on-the-fly,需要采用offline提前对字节码插桩:
(1) 运行环境不支持java agent。
(2) 部署环境不允许设置JVM参数。
(3) 字节码需要被转换成其他的虚拟机如Android Dalvik VM。
(4) 动态修改字节码过程中和其他agent冲突。
(5) 无法自定义用户加载类。
Java Agent 插桩
Java Agent插桩
JAVA_AGENT="-javaagent:${jacoco_jar_path}/jacocoagent.jar=includes=me.*,output=tcpserver,address=192.168.112.76,port=8800,classdumpdir=/data/ATFC/jacoco,destfile=/data/ATFC/atfcapi-deploy/atfcapi_tool/jacoco.exec"
需要设定以下几个参数:
A: includes: 需要生成覆盖率的类
B: output=tcpserver 固定的参数
C: address 和port 指定output=tcpserver时需要指定的参数, address指定为服务器地址,port随便指定为没有被占用的端口
D: classdumpdir 指定编译后的class文件路径
E: destfile 指生成的覆盖率文件路径
Jacoco 生成报告
生成报告需以下信息
1. Class文件 2. EXE 文件 3. Source code
覆盖率Diff流程
GIT Diff: 获取修改的行数
AWT: 获取每个类方法的行数
前两部分结合获取变更的Method
Diff 详细信息
AST 获取行数
minimart-delivery-data/src/main/java/me/ele/minimart/delivery/data/dao/entity/LogisticsOrder.java:{setExecutorPhone@@setExecutorPhone(String)=514,516, getCheckExpireTimeStatus@@getCheckExpireTimeStatus()=286,288, getCreatedAt@@getCreatedAt()=582,584, getShelfGroupCode@@getShelfGroupCode()=406,408, getShelfGroupName@@getShelfGroupName()=414,416, getTaskCode@@getTaskCode()=310,312, getLogisticsOrderCode@@getLogisticsOrderCode()=302,304, setRejectRemark@@setRejectRemark(String)=274,276, setCreatedAt@@setCreatedAt(Date)=586,588, setShelfGroupAddress@@setShelfGroupAddress(String)=426,428, getDiffOffShelf@@getDiffOffShelf()=478,480, setExecutorName@@setExecutorName(String)=506,508, getUpdatedAt@@getUpdatedAt()=590,592, getCheckStockTime@@getCheckStockTime()=566,568, setExceedMaxStockTag@@setExceedMaxStockTag(Integer)=634,636, getRemark@@getRemark()=574,576, toString@@toString()=643,694, getTemplateNames@@getTemplateNames()=326,328, getExceedMaxStockTag@@getExceedMaxStockTag()=630,632, setAssignedExecutorTime@@setAssignedExecutorTime(Date)=554,556, setTemplateNames@@setTemplateNames(String)=330,332,
Sonar报告
在服务器上安装 sonar-runner 并且配置sonar runner 的配置文件 sonar-runner.properties
这篇关于jacoco-sonarjava覆盖率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!