Jacoco--测试覆盖率工具

介绍

JaCoCo(Java Code Coverage)是一种分析单元测试覆盖率的工具,使用它运行单元测试后,可以给出代码中哪些部分被单元测试测到,哪些部分没有没测到,并且给出整个项目的单元测试覆盖情况百分比,看上去一目了然。

JaCoCo会生成以下指标的度量:

Instructions (C0 Coverage)

  • 主要是计算字节码文件的覆盖率。

Branches (C1 Coverage)

  • JaCoCo也计算分支覆盖所有if和 switch语句。主要是计算分支的。
  • 没有覆盖:在该行没有分支机构已执行(红钻)
  • 部分覆盖:只有在该行分支机构的一部分已经被执行(黄钻)
  • 全覆盖:在该行各分支机构已执行(绿钻)

Cyclomatic Complexity

  • 圈复杂度(Cyclomatic Complexity)是一种代码复杂度的衡量标准。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。请注意,JaCoCo不考虑异常处理的分支机构try-catch块也不会增加复杂性。总体和分支正相关。实际上,过去几年的各种研究已经确定:一个方法的圈复杂度(或 CC)大于 10 的方法存在很大的出错风险。
  • 关于圈复杂度的理解,可以看以下链接。

Lines

  • 主要计算基于覆盖的实际源代码行类和源文件行覆盖。通常会标识三种状态。
  • 没有覆盖:在该行任何指令执行(红色背景)
  • 部分覆盖:只有在该行的指示的一部分已经被执行(黄色背景)
  • 全覆盖:在该行的所有指令已执行(绿色背景)

Methods

  • 每个非抽象方法包含至少一个指令。构造函数和静态初始化都算作方法。

单元测试

Eclipse 插件 EclEmma

EclEmma的安装

1.启动eclipse,点击Help菜单,Install New Software,在弹出的对话框中,点击Add

2. 输入Name,例如EclEmma。输入Location:update.eclemma.org/

3. 在Work With处选择刚刚输入的Location地址

4. 安装后重新启动eclipse,如果成功安装,工具栏上会出现一个新的按钮

EclEmma的使用

1.编写单元测试用例。现在支持以下测试:

  • Local Java application
  • Eclipse/RCP application
  • Equinox OSGi framework
  • JUnit test
  • TestNG test
  • JUnit plug-in test
  • JUnit RAP test
  • SWTBot test
  • Scala application

2.以JUnit为例,在测试用例文件上右键,选择 Coverage As -> JUnit Test

3. 会在测试的文件中显示出运行结果:

  • 绿色:完整执行 
  • 红色:没执行 
  • 黄色:部分执行

4.通过点击调出Coverage窗口,它是用来统计程序的覆盖测试率

5. 点击红色矩形框的按钮能将多次测试的覆盖数据综合起来进行查看

6. 在Coverage视图主区域中点击右键,出现的快捷菜单中选择”Export Report…”

7.出现Export界面,选项如下:

  • Available sessions:要导出的session 
  • Format:选择报告的类型(HTML/XML/Text/EMMA session) 
  • Destination:导出的session 存放的位置

IDEA插件

IDEA自带Jacoco单元测试分析工具,操作步骤如下。
1.选择编辑配置 “Edit Configurations”。


2.添加单元测试类型,选择被测文件,此处以TestNG为例,测试所有代码(不包含lib)。


3.选择工具jacoco。


4.以覆盖率模式运行测试用例。


5.运行完成后自动生成测试报告。


MAVEN

在pom.xml文件中添加以下插件后,运行 mvn test 即可在target/site/jacoco文件夹下生成报告。

如果想要跳过失败的测试用例,请使用 mvn test -Dmaven.test.failure.ignore=true

<plugin>    <groupId>org.jacoco</groupId>    <artifactId>jacoco-maven-plugin</artifactId>    <version>0.8.2-SNAPSHOT</version>    <executions>        <execution>            <id>default-prepare-agent</id>            <goals>                <goal>prepare-agent</goal>            </goals>        </execution>        <execution>            <id>default-report</id>            <phase>test</phase>            <goals>                <goal>report</goal>            </goals>        </execution>        <execution>            <id>default-check</id>            <goals>                <goal>check</goal>            </goals>        </execution>    </executions></plugin>复制代码

运行时测试

jacoco支持程序运行中监控执行情况。下面介绍直接运行和tomcat服务器运行两种监控方式。

准备

在jacoco官方下载jacoco包,下载连接:www.jacoco.org/jacoco/

下载的包中包括三个jar,此处使用 jacocoagent.jar 和 jacococli.jar

直接运行

1.假如直接运行的是test.jar, 运行以下命令:

java -javaagent:jacoco\jacocoagent.jar=includes=* -jar test.jar

其中下划线处指明准备中的jar包,后面为参数。

相关参数请参考:www.jacoco.org/jacoco/trun…

2.待程序运行结束后,会在test.jar同级目录生成jacoco.exec文件,此文件为jacoco获取的运行情况文件。

3.获取需要分析的class文件,假设test.jar中的源代码生成的文件位于com文件夹中,将此文件夹放入和jacoco.exec同一文件夹下。

4.执行命令即可生成报告:

java -jar jacoco\jacococli.jar report jacoco.exec --classfiles com --html report

下划线处为准备中的jar包,report表明生成报告, jacoco.exec为运行监控文件,–classfiles为生成报告正对的class文件,–html为报告格式,report为报告文件夹。(此处的class文件应当和运行中相同)

详细参数请参考:www.jacoco.org/jacoco/trun…

tomcat运行

tomcat运行与直至运行的方式基本相同,唯一不同的是指明jacocoagent.jar的方式。

在Windows下,在$TOMCAT_HOME/bin/catalina.bat,Linux下,在$TOMCAT_HOME/bin/catalina.sh的前面,增加如下设置:

set "JAVA_OPTS=-javaagent:=jacoco\jacocoagent.jar=includes=*"

如果在参数中未未指明exec文件的生成路径,那么会在$TOMCAT_HOME/bin文件夹下生成,其余操作与上述相同。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值