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文件夹下生成,其余操作与上述相同。
Jacoco--测试覆盖率工具相关推荐
- 阿里p8推荐,测试覆盖率工具—Jacoco,实用性极佳
测试覆盖率工具 测试过程中根据需求文档和设计文档编写测试用例.执行测试:为了更加全面的覆盖,我们可能还需要理解被测程序的逻辑,需要考虑到每个函数的输入与输出,逻辑分支代码的执行情况,这个时候我们的测试 ...
- Android 增量代码测试覆盖率工具实践
当业务快速发展,新业务不断出现,开发同学粗心的情况下,难免会出现少测漏测的情况,如何保证新增代码有足够的测试覆盖率?当一段正常的代码,开发却修改了,测试人员没有测试其功能,如果保证能够发现? 所以代码 ...
- 代码扫描工具测试覆盖率工具
测试覆盖率工具 转载于:https://www.cnblogs.com/vivian-test/p/5398289.html
- iOS 覆盖率检测原理与增量代码测试覆盖率工具实现
背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...
- ios 单元测试覆盖率怎么查看_iOS 覆盖率检测原理与增量代码测试覆盖率工具实现...
背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...
- 测试覆盖率工具:EclEmma
测试覆盖率工具:EclEmma 目录 1 测试覆盖率实现技术 2 EclEmma介绍 3 EclEmma测试覆盖率指标 4 EclEmma安装 5 示例项目介绍 5.1 创建项目 5.2 用C ...
- 测试覆盖率工具--EMMA
测试覆盖率(Code Coverage) 测试覆盖率,简单的说,就是评价测试活动覆盖产品代码的指标.测试的目的,是确认产品代码按照预期一样工作,也可以看作是产品代码工作方式的说明文档.进一步考虑,测试 ...
- Android增量代码测试覆盖率工具
美团业务快速发展,新项目新业务不断出现,在项目开发和测试人员不足.开发同学粗心的情况下,难免会出现少测漏测的情况,如何保证新增代码有足够的测试覆盖率是我们需要思考的问题. 先看一个bug: 以上代码可 ...
- java测试覆盖率工具_【腾讯TMQ】JAVA代码覆盖率工具JaCoCo-原理篇(下)
三.JaCoCo使用方式 使用方式有很多,这里贴出了相应的参考链接,根据项目的不同可以灵活供有需要的读者去学习. 3.1 Apache Ant方式 参见 http://eclemma.org/jaco ...
- 测试覆盖率统计工具_使用测试工具和方法进行测试覆盖率
测试覆盖率统计工具 概述: 要定义"测试覆盖率",我们必须谈论以下主题: 测试覆盖的目的. 不同类型的测试覆盖率标准. 测试覆盖率指标 单元测试范围 测试覆盖率工具 测试覆盖范围的 ...
最新文章
- 两种控制器的跳转与回跳
- Web框架——Flask系列之WTF表单验证练习(七)
- pb通过对象名称调用对象_C++ 可调用对象(二)
- ImageMagick还是GraphicsMagick?
- python经典数据类型
- 调用servlet java_请问调用servlet并从JavaScript调用Java代码以及参数
- 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
- 安卓平板python编程软件下载_10 个可以在平板电脑上使用的 Python 编辑器
- Word把普通表格改为三线表格的方法
- chromeOS介绍
- 使用后端解析地图.shp.prj文件得到GeoJson数据
- 在线latex 网址
- macOS Big Sur 安装 CH340 串口转 USB 驱动
- ubuntu 触摸板失灵解决
- echarts使用笔记总结3:series使用方法
- 部署“极客猿导航geek-navigation遇到的问题”——作者没说但你就会遇到(1)
- 发动机冷却系统的控制论文综述
- “图发展”与“保安全”:大数据今后怎么玩?
- Redis使用验证码
- 使用Azure Kinect Body骨骼构造SMPL三维人体模型
热门文章
- python列表索引超出范围 等于啥_python - IndexError:列表分配索引超出范围,Python
- 多GPU运行Deep Learning 和 并行Deep Learning(待续)
- jQuery源码解读
- oracle 之 安装后pl/sql登录报ora-12154
- centos 安装软件
- POJ 1637 Sightseeing tour 混合图欧拉回路存在性判断
- Google开源Leak Finder——用于检测内存泄漏的JavaScript工具
- 自己动手编写一个ajax extender
- iOS 适配HTTPS方法
- iOS开发常用的RGB色值和宏