美文网首页
Jacoco原理

Jacoco原理

作者: 爱读书的夏夏 | 来源:发表于2020-03-07 14:41 被阅读0次

    Jacoco使用插桩的方式来记录覆盖率数据,是通过一个probe探针来注入。

    插桩模式有两种:

    1. on-the-fly模式

    JVM通过 -javaagent参数指定jar文件启动代理程序,代理程序在ClassLoader装载一个class前判断是否修改class文件,并将探针插入class文件,探针不改变原有方法的行为,只是记录是否已经执行。

    2. offline模式

    在测试之前先对文件进行插桩,生成插过桩的class或jar包,测试插过桩的class和jar包,生成覆盖率信息到文件,最后统一处理,生成报告。

    on-the-fly和offline对比
    on-the-fly更方便简单,无需提前插桩,无需考虑classpath设置问题。
    以下情况不适合使用on-the-fly模式:
    (1)不支持javaagent
    (2)无法设置JVM参数
    (3)字节码需要被转换成其他虚拟机
    (4)动态修改字节码过程和其他agent冲突
    (5)无法自定义用户加载类

    Java方法的控制流分析

    官方文档在这里:https://www.jacoco.org/jacoco/trunk/doc/flow.html

    Jacoco的使用分为三部分,第一部分是注入并采集,第二部分是导出,第三部分是生成报告,三部分可以分开执行。

    (1)首先在被测程序的启动命令行中加上-javaagent选项,指定jacocoagent.jar作为代理程序。

    Jacoco agent搜集执行信息并且在请求或者JVM退出的时候导出数据。有三种不同的导出数据模式:

    1. 文件系统:JVM停止时,数据被导出到本地文件
    2. TCP socket Server:监听端口连接,通过socket连接获取到执行数据。在VM退出时,可选择进行数据重置和数据导出。
    3. TCP socket Client:启动时,Jacoco agent连接到一个给定的TCP端,请求时执行数据写到socket,在VM退出时,可选择进行数据重置和数据导出。

    (2)导出数据,假如指定导出模式为tcpserver,那么我们需要启动一个client来请求覆盖率文件数据。

    相关文章

      网友评论

          本文标题:Jacoco原理

          本文链接:https://www.haomeiwen.com/subject/qpuqdhtx.html