测试覆盖率工具:EclEmma

2016-08-26

目录

1 测试覆盖率实现技术
2 EclEmma介绍
3 EclEmma测试覆盖率指标
4 EclEmma安装
5 示例项目介绍
  5.1 创建项目
  5.2 用Coverage as TestNG Suite跑用例
  5.3 跑后结果
  5.4 导出HTML报告
  5.5 导入导出合并覆盖率Session
  5.6 测试引用的jar包的覆盖率

1 测试覆盖率实现技术


返回

  • Instrumentation:代码注入,在产品代码的关键位置插入统计代码,从而获得测试覆盖率数据

    • Class Instrumentation: 把统计代码插入编译好的.class文件
    • Source Instrumentation:把统计代码插入源代码并编译成新的.class文件
  • Custom JVM:在JVM中把统计代码插入.class。测试覆盖率分析可以在JVM执行测试代码的过程中完成

2 EclEmma介绍


返回

  • 一个优秀的开源软件测试工具
  • eclipse的一个插件
  • 能够对由 Java 语言编写的程序进行覆盖测试
  • 能够在工作平台中启动
  • 直接对代码覆盖进行分析
  • 覆盖结果将立即被汇总并在Java源代码编辑器中高亮显示
  • 也可程序运行的结果生成详尽的覆盖测试报告
  • 可以结合JUnit、TestNG使用
  • 工作原理:Class Instrumentation

3 EclEmma测试覆盖率指标


返回

  • 行覆盖率:  部分行覆盖:a>b?a:b
  • 基本语句块覆盖率:  基本语句块:没有if-else分支的代码区域
  • 类覆盖率:  由JVM加载并初始化
  • 方法覆盖率:  第一个基本语句块被执行

4 EclEmma安装


返回

  1. 启动eclipse -> 点击Help菜单 -> Install New Software,在弹出的对话框中,点击Add
  2. 输入Name,例如EclEmma。输入Location:http://update.eclemma.org/
  3. 安装后重新启动eclipse,如果成功安装,工具栏上会出现一个新的按钮,如图1所示

图1 EclEmma按钮

5 示例项目介绍


返回

下面通过项目介绍如何在使用了TestNG测试框架的项目中的使用EclEmma测试覆盖率

TestNG请参考: TestNG 入门教程

5.1 创建项目

项目中使用TestNG测试框架,包含被测类'Calculator'和测试类'CalculatorTest'。

源代码:TestngAndEclEmmaDemo.zip

图2 测试结构

5.2 用Coverage as TestNG Suite跑用例

图3 Coverage as TestNG Suite

5.3 跑后结果

图5 标注源代码和Coverage视图

5.4 导出HTML报告

如何导出:
  1. 要导出的session (session:一次测试覆盖率交互活动)
  2. 选择报告的类型(HTML/XML/Text/EMMA session)
  3. 存放位置
 图6 导出报告 

图7 HTML报告

HTML报告可以逐层展开,点击方法还可以看到代码的覆盖情况。

列名含义:

  • missed Instructions代码覆盖率,
  • Missed Branches逻辑分支覆盖率,
  • Missed Cxty判断执行数,
  • missed Lines代码行数,
  • Methods方法个数。

5.5 导入导出合并覆盖率Session

既可以导出session,也可以导入session,还可以合并session,这样,可以将多次测试覆盖率的结果进行合并

图8 合并Session

5.6 测试引用的jar包的覆盖率

图9 测试引用的jar包的覆盖率

其他Eclipse覆盖率插件

EclEmma、Clover与Cobertura插件

测试覆盖率工具:EclEmma的更多相关文章

  1. 测试覆盖率工具EclEmma安装与使用

    此文来自于:https://www.cnblogs.com/cnsdhzzl/p/7638883.html EclEmma的简介 一个优秀的开源软件测试工具 eclipse的一个插件 能够对由 Jav ...

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

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

  3. JUNIT单元测试时统计代码的覆盖率工具eclemma安装

    EclEmma是Eclipse里的一个插件,安装简单,覆盖率显示直观.安装EclEmma.打开Eclipse,点击Help → Software Updates → Find and Install, ...

  4. 测试覆盖率Emma工具使用

    Emma使用与分析 #什么是Emma EMMA 是一个开源.面向 Java 程序测试覆盖率收集和报告工具.它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种 ...

  5. 白盒测试笔记之:Junit 单元测试以及测试覆盖率

    单元测试: 单元测试是从代码层面验证代码的正确性. 一般考虑接口中的数据结构是否正确,变量的临界条件,如空字符串,空集合等. ​ Junit入门  参考: Junit 入门教程: https://ww ...

  6. Java測试覆盖率工具----Cobertura,EclEmma

    Cobertura 是一个与Junit集成的代码覆盖率測量工具 它是免费.开源的 它能够与Ant和Maven集成.也能够通过命令行调用 能够生成HTML或XML格式的报告 能够依照不同的标准对HTML ...

  7. Jacoco覆盖率工具使用调研

    JaCoCo Java Code Coverage Library Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以 ...

  8. Jacoco覆盖率工具使用

    Jacoco介绍 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第 ...

  9. jacoco-1-java代码测试覆盖率之本地环境初体验

    前言 jacoco是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以插桩到Ant.Maven中,可以使用其JavaAgent技术监控Java程序等. 那么本次主要使用对java ...

随机推荐

  1. Android超链接

    第一种: text += "<a href='http://www.baidu.com'>百度超链接</a>"; CharSequence charSequ ...

  2. poj 2253 Frogger (最小最大路段)【dijkstra】

    <题目链接> 题目大意: 给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过任意石头到达B,问从A到B多条路径中最小的最长边. 解题分析: 这是最短路的一类典型题目,与普通的最 ...

  3. python套接字编程基础

    python套接字编程 目录 socket是什么 套接字的工作流程 基于tcp的套接字 基于udp的套接字 socket是什么 客户端/服务器架构(C/S架构) 服务端:提供服务的一端 客户端:请求服 ...

  4. 机器学习数据处理时label错位对未来数据做预测

    这篇文章继上篇机器学习经典模型简单使用及归一化(标准化)影响,通过将测试集label(行)错位,将部分数据作为对未来的预测,观察其效果. 实验方式 以不同方式划分数据集和测试集 使用不同的归一化(标准 ...

  5. js算法初窥05(算法模式02-动态规划与贪心算法)

    在前面的文章中(js算法初窥02(排序算法02-归并.快速以及堆排)我们学习了如何用分治法来实现归并排序,那么动态规划跟分治法有点类似,但是分治法是把问题分解成互相独立的子问题,最后组合它们的结果,而 ...

  6. Python学习——web框架

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. WSGI(Web Server Gateway Interface)是一种规范,它定义了使用p ...

  7. 潭州课堂25班:Ph201805201 爬虫高级 第三课 sclapy 框架 腾讯 招聘案例 (课堂笔记)

    到指定目录下,创建个项目 进到 spiders 目录 创建执行文件,并命名 运行调试 执行代码,: # -*- coding: utf-8 -*- import scrapy from ..items ...

  8. 深入一下Django的用户认证和cache

    深入一下Django的用户认证和cache 用户认证 首先明白一个概念,http协议是无状态的,也就是每一次交互都是独立的,那如何让服务器和客户端进行有状态的交互呢,现在较为常见的方法就是让客户端在发 ...

  9. netty如何知道连接已经关闭,socket心跳,双工?异步?

    https://stackoverflow.com/questions/10240694/java-socket-api-how-to-tell-if-a-connection-has-been-cl ...

  10. Java 对象的序列化和反序列化

    先创建一个实现了Serializable接口的对象 import java.io.Serializable; /** * 可序列化Person对象. * @author Ramer * Sep 18, ...