代码覆盖率

用途

测试覆盖率评价的是测试代码的质量,并不是产品代码的质量
代码覆盖率是一种白盒测试,因为测试覆盖率是评价产品代码类内部的指标,而不是评价系统接口或规约。测试覆盖率尤其用于评价测试代码是否已经覆盖了产品代码所有的路径。

分类

类的覆盖率:类覆盖描熟了项目中多少类已被测试套件访问。  
方法覆盖率:方法覆盖率是被访问的方法的百分比。 
语句覆盖率:语句覆盖率追踪单条源代码语句的调用。 
语句块覆盖率:语句快覆盖率将语句块作为基本的覆盖律单元。 
分支覆盖率:分支覆盖率也被称为判断覆盖率。指标计算哪些代码分支被执行。


代码的覆盖深度:从覆盖源程序语句的详尽程度分析,逻辑覆盖标准包括以下不同的覆盖
标准:语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖和修正判定条件覆
盖。 参考:http://bbs.51testing.com/thread-74208-1-1.html

  ·语句覆盖为了暴露程序中的错误,程序中的每条语句至少应该执行一次。因此语句覆
盖(Statement Coverage)的含义是:选择足够多的测试数据,使被测程序中每条语句至少执
行一次。语句覆盖是很弱的逻辑覆盖。

  ·判定覆盖 比语句覆盖稍强的覆盖标准是判定覆盖(Decision Coverage)。判定覆盖的
含义是:设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,
或者说使得程序中的每一个取“真”分支和取“假”分支至少经历一次,因此判定覆盖又称为
分支覆盖。

  ·条件覆盖在设计程序中,一个判定语句是由多个条件组合而成的复合判定。为了更彻
底地实现逻辑覆盖,可以采用条件覆盖(Condition Coverage)的标准。条件覆盖的含义是:
构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。

  ·多条件覆盖多条件覆盖也称条件组合覆盖,它的含义是:设计足够的测试用例,使得
每个判定中条件的各种可能组合都至少出现一次。显然满足多条件覆盖的测试用例是一定满足
判定覆盖、条件覆盖和条件判定组合覆盖的。

  ·修正条件判定覆盖修正条件判定覆盖是由欧美的航空/航天制造厂商和使用单位联合制
定的“航空运输和装备系统软件认证标准”,目前在国外的国防、航空航天领域应用广泛。这
个覆盖度量需要足够的测试用例来确定各个条件能够影响到包含的判定的结果。它要求满足两
个条件:首先,每一个程序模块的入口和出口点都要考虑至少要被调用一次,每个程序的判定
到所有可能的结果值要至少转换一次;其次,程序的判定被分解为通过逻辑操作符(and、
or)连接的布尔条件,每个条件对于判定的结果值是独立的。

覆盖率工具 

Clover(商用)、EMMA和Cobertura,  JaCoCo

特点/工具CoberturaEmmajacoco

http://rensanning.iteye.com/blog/2002371
http://blog.csdn.net/smile0102/article/details/48688763
集成一个与Junit集成的代码覆盖率测量工具

可以与Ant和Maven集成,也可以通过命令行调用
可以统计几种覆盖率:class,method,block, line。支持版本迭代的覆盖率统计

免费且开源的Java代码覆盖率测试工具,100%纯Java编写,不依赖与任何第三方库
(Java Code Coverage)是开源的Java代码覆盖率测试library
可以集成到ANT、Maven等build工具中。它采用标准的JVM Tool Interface。把JaCoCo agent 加入到JVM后启动,加载到JVM中的class具体被执行了哪些代码行将会被记录下来,JaCoCo搜集这些执行信息直到JVM结束后生成静态报告。
开源免费、开源的免费、开源的免费、开源的
报告形式

可以生成HTML或XML格式的报告

可以按照不同的标准对HTML结果进行排序

提供了多种格式的报告,包括纯文本,HTML和XML,所有的报告都可以进行详细设置以获得定制报告 
覆盖率统计为每个类、包以及整个项目计算所覆盖的代码行与代码分支的百分比例支持对类,方法,代码行和基本的分支语句的覆盖率测试

使用EMMA时,不需要获得源代码就可进行覆盖率测试,此外,EMMA还支持对整个jar文件测试。
 
    
    
注释:

在Java测试覆盖率工具上,还有一个更加简单的工具:EclEmma(推荐,EclEmma是一个基于EMMA的Java代码覆盖工具) ,它可以很方便的与Eclipse集成,然后可以直接run,显示出代码覆盖率,其地址是:http://www.eclemma.org/


错误认识

为覆盖率而设计是错误得的,有一点:有覆盖率统计,好过没有 

功能测试代码覆盖率统计工具-EMMA

原理:

 仅仅支持JDK7,如果JDK8,需要选择如jacoco等工具。

脚本的编写:
http://tianya23.blog.51cto.com/1081650/364094

EMMA 所使用的字节码插装 不仅保证 EMMA 不会给源代码带来“脏代码”,还确保 EMMA 摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试成为了可能。

大多数功能测试中,测试人员一般不能直接得到被测源代码,源代码也不是测试人员关心的重点。在具体的测试过程中,功能测试人员一般以一个有意义的功能模块作为测试关心的重点,而能够反映一定功能含义的类和方法的覆盖率在功能测试中更有价值。因此,在功能测试中,类覆盖率和方法覆盖率是测试人员关心的重点,行和块覆盖率则作为测试的参考。

测试覆盖率报告中包含了两个方面的内容,测试覆盖的部分和未被测试覆盖的部分。尽管百分之百的测试覆盖率不能代表被测对象完全没有问题,但是测试覆盖的部分以及覆盖比率可以增加测试者对测试工作的信心,指导测试执行以及测试的方向。另一方面,当测试用例执行出现异常时,针对每个测试用例的测试报告还可以提供可疑代码的范围,为代码纠错提供帮助。

测试覆盖率报告中未覆盖的部分也同样有价值:

  • 表明测试可能不完整,有些功能、代码没有被测试覆盖到。
  • 为测试用例的设计提供指导建议。在覆盖率报告的指导下,测试人员有目的地与开发人员进行讨论,确定未覆盖部分是测试的空白还是不需要测试的部分。
  • 帮助开发人员发现无用代码,为修改,完善代码提供依据。

在使用 EMMA 获得测试覆盖率过程中,类、方法等覆盖的百分比报告,可以方便测试人员更好的评估测试。测试人员通过对照覆盖率报告与测试用例设计文档,需求文档可以迅速找到测试的不足。通过与开发人员进行讨论,可以更好的评估测试力度,并指导进一步的测试。因此在功能测试中引入覆盖率信息,能够完善测试结果报告,确保测试质量和力度,保证测试按质、按量地完成。


EMMA 使用

EMMA基本是四步曲:插桩(instr),运行,收集(ctl),报告(report)

版本0:http://www.ibm.com/developerworks/cn/opensource/os-cn-emma/

插装被测组件

EMMA 通过对被测组件进行插装来跟踪被测组件的执行过程。测试人员应首先和开发人员讨论,确定哪一部分包含了符合插装要求的文件( Java 文件),哪一部分需要考虑覆盖率信息,然后选择合适的方式进行插装。

  • 插装准备

在执行插装操作之前,首先应该扩展 Java 虚拟机,即将 emma.jar 放到被测组件运行使用的JRE 目录下面作为 JRE 的扩展,以便 EMMA 能够被调用。 emma.jar 包含了 EMMA 核心功能模块的实现和 EMMA 运行时所需的类文件,这些文件是使用 EMMA 所必需的。

由于示例被测组件运行在 Websphere Portal Server 中,并使用默认的 JRE 运行,因此将emma.jar 放到 “/opt/WebSphere/PortalServer/java/jre/lib/ext” 下面。在实际的测试中,将该路径进行相应的替换。

  • 插装
EMMA 中提供了 “instr” 命令完成插装操作。插装操作可以面向 JAR 包、 WAR 包、 WAR 包、类文件和目录,选择合适的命令进行插装可以使插装过程变得简便。

清单 1. 对类文件插装命令
/opt/WebSphere/PortalServer/java/jre/bin/java emma instr -m overwrite -ip 
/opt/WebSphere/PortalServer/installedApps/NumberQuizWEB_10yggsru.ear/NumberQuizWEB.war/WEB
-INF/classes -Dmetadata.out.file=/root/emma/Number_coverage.em
  • 合并元数据

完成插装操作以后,在指定的路径下会产生一些名为 “*coverage.em” 的文件,这些文件保存了插装的元信息,这些信息主要是记录插装过程中的插装点在被测代码中的位置。如果在插装过程中,指定这些文件到同一文件的话, EMMA 默认将元数据进行合并。如果测试人员未指定路径,或者希望得到独立的元文件,这些文件将分别产生在默认或指定的目录下。测试人员还可以通过使用 “merge” 命令手动将这些元文件进行合并,保证生成的覆盖率报表的全面性。注意:合并操作不支持逆向操作。

清单 5. 合并元数据命令
/opt/WebSphere/PortalServer/java/jre/bin/java emma merge 
-input <path1>/coverage1.em,<path2>/coverage.em -out <path>/coverage2.em

完成上面的操作以后,就已经完成了收集覆盖率信息的准备工作。接下来测试人员可以进行正常的测试工作,在运行测试的过程中, EMMA 将跟踪并记录执行轨迹,得到覆盖率信息。

运行测试用例,得到覆盖率报告

完成插装工作以后,测试人员可以按照测试计划运行测试用例。 EMMA 将在测试执行的过程中记录代码执行信息并将结果记录在内存中。每次当 JVM 停止时,内存中记录的执行信息将被清除并被保存到 “*.ec” 的文件中。但是在实际测试的过程中, JVM 的停止很难控制,因此测试人员可以定时手动将内存中执行信息写出。在这种情况下,内存中的记录被输出,但是内存中的内容不被清除。

从本地收集覆盖率信息
/opt/WebSphere/PortalServer/java/jre/bin/java -cp emma.jar emma ctl -connect 
auscsdpfvtvm15.bto.ibm.com:47653 -command coverage.get,/root/emma/Number_coverage.ec

EMMA: processing control command sequence 
EMMA: executing [coverage.get (/root/emma/Number_coverage.ec,true,true)] 
EMMA: coverage.get: local copy of coverage data merged into 
          [/root/emma/Number_coverage.ec] {in 39 ms}
EMMA: coverage.get: command completed in 79 ms
EMMA: control command sequence complete

这样收集到的信息被保存在 “coverage.ec” 中, “coverage.ec” 是二进制格式的文件,因此很难被用来查看覆盖率结果。

生成覆盖率报告
/opt/WebSphere/PortalServer/java/jre/bin/java -cp emma.jar emma report -r html -in
 /root/emma/Number_coverage.em,/root/emma/Number_coverage.ec -
Dreport.html.out.file=/root/emma/Number_coverage.html -Dreport.metrics=class:80
(,method:75)

在生成覆盖率报告的过程中,测试人员可以根据测试要求通过 “Dreport.metrics” 参数设定满意的覆盖率标准。在示例命令中设定了类覆盖率的满意度为80%。

测试报告可以以 HTML ,文本和 XML 三种格式输出。

合并覆盖率结果

完成所用的测试用例后,测试覆盖信息可以被合并在一起,得到整个测试的覆盖报告。覆盖率结果文件通过 “merge” 命令合并 “*.ec” 文件实现的。

另外,由于 EMMA 中测试覆盖率是通过与 “*.em” 文件关联获得代码信息的,因此当代码发生变化时,已经运行过的测试不必完全重复,只需将得到的 “*.ec” 文件合并(新得到的 “*.ec” 文件放在后面),然后关联最新的 “*.em” 文件即可得到代码变化后的覆盖率信息,这方便了 EMMA 支持版本变化的测试。在生成新的测试报告的时候,需要注意 “*.ec” 的时间一定要晚于 “*.em” 文件。

清单 9. 合并覆盖率结果命令
/opt/WebSphere/PortalServer/java/jre/bin/java emma merge 
–input coverage1.ec,coverage2.ec,coverage3.ec –output coverage.ec

如果在生成测试报告的时候,如果出现 “com.vladium.emma.EMMARuntimeException: [CLASS_STAMP_MISMATCH] runtime version of class in the coverage data is not consistent with the version of this class in the metadata, possibly because stale metadata is being used for report generation” 错误,说明在生成新的 “*.em” 前后代码曾经被修改过,并且被修改的代码所在的类文件在新的测试中没有被覆盖到,这就需要重新执行这部分测试,保证修改过的部分被重新执行。



版本1:

注意:
1)emma2.0版本不提供ctl命令,请下载最新的2.1.5320进行测试。
2)对于WEB应用的代码覆盖,需要确认开发人员是将用到的类,放到了WEB-INF/classes目录下还是打成jar包的形式,如果是前者参考监控JAVA WEB程序,如果是后者参考监控JAVA后台程序
3) 支持条件覆盖
在EMMA的测试报告中,目前看不出来,如果关联了代码,。对于if(a||b)这样的语句,如果只满足a套件,那么emma只会把标为黄色,表示部分覆盖。
版本2:

监控JAVA后台程序

1、将emma.jar放到$JAVA_HONE/jre/lib/ext目录下
2、java emma instr -m overwrite -cp /root/VDS-2.0/lib/VDS-2.0.jar -Dmetadata.out.file=vds.em
3、启动VDS,在启动VDS时,/root/VDS-2.0/bin/startup.sh

4、运行功能测试用例

5、收集数据:java  emma ctl -connect localhost:47653 -command coverage.get,/root/dingbs/tool/emma/vds.ec

6、转换结果:java -cp emma.jar emma report -r html -in /root/dingbs/tool/emma/vds.em,/root/dingbs/tool/emma/vds.ec -Dreport.html.out.file=/root/dinbs/tool/emma/vds.html

监控JAVA WEB程序

   WEB程序部署到Tomcat或者SunOne后,都会将war文件进行解压缩,因此我们监控的为里面的class文件

1、启动emma[root@msspora tool]# java emma instr -m overwrite -ip /root/apache-tomcat-6.0.10/webapps/CMCC/WEB-INF/classes -Dmetadata.out.file=webcmcc.em

2、启动Tomcat,/root/apache-tomcat/bin/startup.sh

3、使用IE进行功能测试

4、收集数据:java  emma ctl -connect localhost:47653 -command coverage.get,/root/dingbs/tool/emma/webcmcc.ec

5、转换结果:java -cp emma.jar emma report -r html -in /root/dingbs/tool/emma/webcmcc.em,/root/dingbs/tool/emma/webcmcc.ec -Dreport.html.out.file=/root/dinbs/tool/emma/webcmcc.html


版本3:http://blog.csdn.net/u012245006/article/details/50299337



把emma.jar放到示例工程项目lib目录下;
Emma.jar放置路径为:C:\apache-tomcat-6.0.29\webapps\jspxcms\WEB-INF\lib


EMMA生成文件目录:




插桩生成的二进制文件:jspxcms_coverage.em




收集覆盖率信息生成的二进制文件:jspxcms_coverage.ec




生成覆盖率报告的文件:jspxcms_coverage.html


插桩


插桩前,启动应用服务。




在命令窗口中cd C:/Program Files/Java/jre6/bin/




(或直接配置emma.jar的classpath环境变量)




运行


确保emma.jar已放在tomcat部署JSPXCMS的lib目录下,一般情况下,直接运行应用程序即可。EMMA会启动一个监听端口,用来后面收集信息(ctl)。这个端口是固定的,47653。


启动TOMCAT:


打开JSPXCMS网站,执行一系列功能测试操作。


收集


执行收集命令前,应用服务需保持启用状态。


本地覆盖率数据收集命令:


收集成功显示: 收集到的信息被保存在 “coverage.ec” 中。


打开jspxcms_coverage.html,覆盖率的报告是以包、类、方法三级单位组织的。其中红颜色代表该覆盖率未达到满意的覆盖率标准

版本4:


http://lishiguang.iteye.com/blog/1123641


可以怎么用EMMA 


On-the-fly 模式 
Offline 模式 
使用emma基本步骤 
1、插装字节码到想要测试覆盖率的文件-> 生成coverage.em 文件 
插装操作可以面向 JAR 包、 WAR 包、 WAR 包、类文件和目录 
2、按正常的工作流程启动服务器,测试程序。 
3、收集覆盖率信息->生成coverage.ec文件 
可以在本机收集,也可以从远程机器收集 
4、生成覆盖率报告->通过coverage.em 和 coverage.ec文件 

jacoco

原理:

JaCoCo(Java Code Coverage)是开源的Java代码覆盖率测试library,它可以集成到ANT、Maven等build工具中。它采用标准的JVM Tool Interface,并提供了EclEmma Eclipse插件,也可以使用Java Agent技术监控Java程序。【很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins、IDEA. 】把JaCoCo agent 加入到JVM后启动,加载到JVM中的class具体被执行了哪些代码行将会被记录下来,JaCoCo搜集这些执行信息直到JVM结束后生成静态报告。


  • 注入方式介绍

JaCoCo同时支持on-the-fly和offline的两种插桩模式。

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)无法自定义用户加载类。

覆盖率在实际在项目中的主要实施点:



  • 确定插装方式:

Android项目只能使用JaCoCo的离线插桩方式。

为什么?主要是因为Android覆盖率的特殊性:

一般运行在服务器java程序的插桩可以在加载class文件进行,运用java Agent的机制,可以理解成"实时插桩"。JaCoCo提供了自己的Agent,完成插桩的同时,还提供了丰富的dump输出机制,如File,Tcp Server,Tcp Client。覆盖率信息可以通过文件或是Tcp的形式输出。这样外部程序可很方便随时拿到被测程序的覆盖率。

但是Android系统破坏了JaCoCo这种便利性,原因有两个:

(1)Android虚拟机不同与服务器上的JVM,它所支持的字节码必须经过处理支持Android Dalvik等专用虚拟机,所以插桩必须在处理之前完成,即离线插桩模式。

(2)Android虚拟机没有配置JVM 配置项的机制,所以应用启动时没有机会直接配置dump输出方式

Jacoco包含了多种尺度的覆盖率计数器:

包含指令级(Instructions,C0 coverage),分支(Branches,C1 coverage)、圈复杂度(Cyclomatic Complexity)、行(Lines)、方法(non-abstract methods)、类(classes)。

行覆盖率:度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。

类覆盖率:度量计算class类文件是否被执行。

分支覆盖率:度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的 分支数量。

方法覆盖率:度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。

指令覆盖:计数单元是单个java二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全 独立源码格式。

圈复杂度:在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测 试案例没有完全覆盖到这个模块。

  • 没有覆盖:这一行中没有指令被执行(红色背景)
  • 部分覆盖:这一行中只有一部分指令被执行(黄色背景)
  • 完全覆盖:这一行中所有指令都被覆盖(绿色背景



启动JVM时添加VM参数:

tomcat 增加VM参数:
对于tomcat,在catalina.sh的JAVA_OPTS配置中增加:

-javaagent:/home/work/local/jacoco/lib/jacocoagent.jar=includes=com.xxx.*

其中 includes:表示针对指定的class进行覆盖率数据收集,
其他参数: append=true/false:每一次收集的覆盖率数据是追加还是替换,不设置默认为true 
destfile=jacoco.exec:dump出来的覆盖率数据文件
output=file/tcpserver/tcpclient:覆盖率数据输出的形式,分别为file,tcpserver和tcpclient,file是比较简单的方式,tcp的方式可支持自行开发获取覆盖率数据的工具。不设置默认是file。

  • shutdown jvm时dump出覆盖率数据
注意采用output=file的方式下,是在jvm停掉时将覆盖率数据dump出来到文件,在shutdown tomcat后不能kill -9 java,只杀掉tomcat进程,否则数据收集无效。生成覆盖率数据需要ant执行,dump出的exec文件之后,就会在指定路径输出html格式覆盖率报告。

  • 不停jvm dump出覆盖率数据
在配置JAVA_OPTS的参数时,修改如下:

-javaagent:/home/work/local/jacoco/jacocoagent.jar=includes=com.xx.*,output=tcpserver,port=10001,address=100.100.100.100


这样的方式下启动tomcat之后,jacoco会在一个端口上提供client访问,并能dump出此时的覆盖率数据文件,dump的方式仍然是ant执行。需要配置server的ip和端口,执行ant dump,输出的还是exec文件,再执行ant jacoco会生成html报告
 

  • (一) tomcat + jacoco 配置 实例:

执行jvm的时候,加上对应的参数javaagent参数,即开启了on-the-fly instrument 方式,在执行程序的时候记录执行的代码覆盖数据。针对于tomcat,我们只需要修改${tomcat.home}/bin/catalina.sh 中的:

 JAVA_OPTS="$JAVA_OPTS -javaagent:/Users/Downloads/jacoco/jacocoagent.jar=includes=*,output=tcpserver,port=2014,address=tomcat IP,append=false"
ANT build.xml:
 <!--dump任务:
     根据前面配置的ip地址,和端口号,
     访问目标tomcat服务,并生成.exec文件。-->
 <target name="dump">
     <jacoco:dump address="${server_ip}" reset="false" destfile="${jacocoexecPath}" port="${server_port}" append="false"/>
 </target>
 
 <!--jacoco任务:
     根据前面配置的源代码路径和.class文件路径,
     根据dump后,生成的.exec文件,生成最终的html覆盖率报告。-->
 <target name="report" depends="dump">
     
  <delete dir="${reportfolderPath}" />
   <mkdir dir="${reportfolderPath}" />
     <jacoco:report>
         <executiondata>
             <file file="${jacocoexecPath}" />
         </executiondata>
             
         <structure name="JaCoCo Report">
             <group name="Check Order related">           
                 <classfiles>
                     <fileset dir="${checkOrderClasspath}" />
                 </classfiles>
                 <sourcefiles encoding="UTF-8">
                     <fileset dir="${checkOrderSrcpath}" />
                 </sourcefiles>
             </group>
         </structure>


         <html destdir="${reportfolderPath}" encoding="utf-8" />  
      <csv destfile="${reportfolderPath}/coverage-report.csv" />  
      <xml destfile="${reportfolderPath}/coverage-report.xml" /> 
     </jacoco:report>
 </target>

注释:
- javaagent : / home / tomcat / lihao / jacoco / lib / jacocoagent . jar = destfile = / tmp / jacoco . exec
重新启动tomcat:启动后,我们查看ps –ef|grep tomcat
如果看到 –javaagent的参数加入成功后,那么我们就可以看到 file /tmp/jacoco.exec 这个文件已经存在了。 这个文件就是执行程序时记录的代码覆盖记录。

  • (二)jboss + jacoco
详细配置参考:
注意:
文件读取权限的问题,jboss启动的java进程时用nobody这个用户启动的,它对/root/下的东西没有读取权限的
当使用acoco的client端去远程连接server端时,一直报“connection refused”的错误,后来发现时jacocoagent启动时默认限制了仅有本地地址127.0.0.1才能连接这个server端的端口;需要在JVM启动的avaagent (jacocoagent)时制定address参数。

  • (三) jetty + jacoco

To enable Jacoco in Jetty, we need to do the following steps:

  1. Download the Jacoco agent
  2. Enable the Java agent in Jetty
  3. Enable the reporting in Maven

Download the Jacoco agent.

The latest version of the Jacoco agent can be downloaded here. In the downloaded jar is another jar, the jacocoagent.jar, which is needed to do online instrumenting of classes.

Enable the Java agent in Jetty.
Once the Jacoco Agent has been downloaded, Jetty needs to be made aware of this. To do this, Jetty needs to be passed the -javaagent parameter. The easiest way to do this is by setting the MAVEN_OPTS environment variable in the following way:

-javaagent:lib/jacocoagent-0.6.3.jar

Alternatively, you can also pass parameters to the -javaagent setting, like this:

-javaagent:lib/jacocoagent-0.6.3.jar=destfile=target/jacoco.exec,append=false,includes=nl.*"

覆盖率报告:

执行完成后会在工程根目录下生成jacoco.exec文件----ant/maven等等 ,将*.exec转换成html报告



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多则惑少则明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值