介绍

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文件夹下生成,其余操作与上述相同。

Jacoco--测试覆盖率工具相关推荐

  1. 阿里p8推荐,测试覆盖率工具—Jacoco,实用性极佳

    测试覆盖率工具 测试过程中根据需求文档和设计文档编写测试用例.执行测试:为了更加全面的覆盖,我们可能还需要理解被测程序的逻辑,需要考虑到每个函数的输入与输出,逻辑分支代码的执行情况,这个时候我们的测试 ...

  2. Android 增量代码测试覆盖率工具实践

    当业务快速发展,新业务不断出现,开发同学粗心的情况下,难免会出现少测漏测的情况,如何保证新增代码有足够的测试覆盖率?当一段正常的代码,开发却修改了,测试人员没有测试其功能,如果保证能够发现? 所以代码 ...

  3. 代码扫描工具测试覆盖率工具

    测试覆盖率工具 转载于:https://www.cnblogs.com/vivian-test/p/5398289.html

  4. iOS 覆盖率检测原理与增量代码测试覆盖率工具实现

    背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...

  5. ios 单元测试覆盖率怎么查看_iOS 覆盖率检测原理与增量代码测试覆盖率工具实现...

    背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...

  6. 测试覆盖率工具:EclEmma

    测试覆盖率工具:EclEmma 目录 1 测试覆盖率实现技术 2 EclEmma介绍 3 EclEmma测试覆盖率指标 4 EclEmma安装 5 示例项目介绍   5.1 创建项目   5.2 用C ...

  7. 测试覆盖率工具--EMMA

    测试覆盖率(Code Coverage) 测试覆盖率,简单的说,就是评价测试活动覆盖产品代码的指标.测试的目的,是确认产品代码按照预期一样工作,也可以看作是产品代码工作方式的说明文档.进一步考虑,测试 ...

  8. Android增量代码测试覆盖率工具

    美团业务快速发展,新项目新业务不断出现,在项目开发和测试人员不足.开发同学粗心的情况下,难免会出现少测漏测的情况,如何保证新增代码有足够的测试覆盖率是我们需要思考的问题. 先看一个bug: 以上代码可 ...

  9. java测试覆盖率工具_【腾讯TMQ】JAVA代码覆盖率工具JaCoCo-原理篇(下)

    三.JaCoCo使用方式 使用方式有很多,这里贴出了相应的参考链接,根据项目的不同可以灵活供有需要的读者去学习. 3.1 Apache Ant方式 参见 http://eclemma.org/jaco ...

  10. 测试覆盖率统计工具_使用测试工具和方法进行测试覆盖率

    测试覆盖率统计工具 概述: 要定义"测试覆盖率",我们必须谈论以下主题: 测试覆盖的目的. 不同类型的测试覆盖率标准. 测试覆盖率指标 单元测试范围 测试覆盖率工具 测试覆盖范围的 ...

最新文章

  1. 两种控制器的跳转与回跳
  2. Web框架——Flask系列之WTF表单验证练习(七)
  3. pb通过对象名称调用对象_C++ 可调用对象(二)
  4. ImageMagick还是GraphicsMagick?
  5. python经典数据类型
  6. 调用servlet java_请问调用servlet并从JavaScript调用Java代码以及参数
  7. 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
  8. 安卓平板python编程软件下载_10 个可以在平板电脑上使用的 Python 编辑器
  9. Word把普通表格改为三线表格的方法
  10. chromeOS介绍
  11. 使用后端解析地图.shp.prj文件得到GeoJson数据
  12. 在线latex 网址
  13. macOS Big Sur 安装 CH340 串口转 USB 驱动
  14. ubuntu 触摸板失灵解决
  15. echarts使用笔记总结3:series使用方法
  16. 部署“极客猿导航geek-navigation遇到的问题”——作者没说但你就会遇到(1)
  17. 发动机冷却系统的控制论文综述
  18. “图发展”与“保安全”:大数据今后怎么玩?
  19. Redis使用验证码
  20. 使用Azure Kinect Body骨骼构造SMPL三维人体模型

热门文章

  1. python列表索引超出范围 等于啥_python - IndexError:列表分配索引超出范围,Python
  2. 多GPU运行Deep Learning 和 并行Deep Learning(待续)
  3. jQuery源码解读
  4. oracle 之 安装后pl/sql登录报ora-12154
  5. centos 安装软件
  6. POJ 1637 Sightseeing tour 混合图欧拉回路存在性判断
  7. Google开源Leak Finder——用于检测内存泄漏的JavaScript工具
  8. 自己动手编写一个ajax extender
  9. iOS 适配HTTPS方法
  10. iOS开发常用的RGB色值和宏