常见覆盖率统计工具

  • emma
  • cobertura
  • jacoco

emma 与 cobertura 是为单元测试而设计的覆盖率统计,jacoco 与 emma 同属于一家公司,但是是为了 更广泛的覆盖率统计而设计的工具。

Jacoco

jacoco 的文档中有个 mission 章节,里面对 jacoco 的定位描述的很好

There are several open source coverage technologies for Java available. While implementing the Eclipse plug-in EclEmma the observation was that none of them are really designed for integration. Most of them are specifically fit to a particular tool (Ant tasks, command line, IDE plug-in) and do not offer a documented API that allows embedding in different contexts. Two of the best and widely used available open source tools are EMMA and Cobertura. Both tools are not actively maintained by the original authors any more and do not support the current Java versions. Due to the lack of regression tests maintenance and feature additions is difficult.

Therefore we started the JaCoCo project to provide a new standard technology for code coverage analysis in Java VM based environments. The focus is providing a lightweight, flexible and well documented library for integration with various build and development tools. Ant tasks, a Maven plug-in and the EclEmma Eclipse plug-in are provided as reference usage scenarios. Also many other tool vendors and Open Source projects have integrated JaCoCo into their tools.

大意是说其他的工具没有得到积极有效的维护,而且其他的工具都是为了单一任务而设计,他们不是为 了“集成”而生。从这一点上我们就可以看出 jacoco 的设计理念。

得益于 jacoco 的设计理念,以及良好的 api 设计,它可以轻松的与已有的工具集成,甚至进行平台 化。它也可以同时用于单元测试与集成测试,所以是一款非常优秀的覆盖率统计工具,很多公司的精准 化测试,就是重度依赖了 jacoco。

覆盖率分析原理

要了解代码覆盖率的统计原理,我们就需要去深入了解 jvm 的机制。这方面的知识是 java 领域的高端 进阶知识,限于篇幅,我们只讲解下大概的原理,完整内容请参考 VM 虚拟机系列的书籍,以及 newrelic 早年发布的若干代码插桩的资料。

简单说下原理,java 源代码会被 javac 编译为 class 文件,class 文件保存了 class 的基本信息与 jvm 的 指令集。java 的底层 runtime,也就是 jvm 在解析 class 的时候,会把文件格式的 class 读取到内存并 运行。android 也是借鉴了这一整套的设计理念,android 上的 runtime 其实是 dalvik 与 art。

当我们要统计代码覆盖率的时候,就需要在代码的执行路径上加入探针分析。通常是在读取类的时候, 在关键的指令块的出口与入口增加标记。当指令块被执行后,就会命中探针并完成记录。

要修改最底层的 jvm 字节码往往是比较麻烦的,需要精通 jvm 的各种指令以及 java class 结构。这方 面的处理目前已有有非常成熟的开源项目可以做大了,如下就是一些知名的字节码修改工具。

ASM

JavaAssist

ByteBuddy、BTrace、JVM-Sandbox

其中 ASM 是所有字节码操作的底层基础,是最底层的字节码修改工具。其他工具是它之上的一些高级 封装。借助于这些工具与 JVM 自身的一些调试特性,我们就可以对 jvm 代码或者进程进行便捷的操纵 了。

插装方式

插桩方式有很多种,常见的方式如下

  • 源代码插桩:offline 插桩,支持 android
  • 字节码插桩:offline 插桩,支持 android
  • javaagent 模式:脱离代码在运行时插桩,on the fly 模式

jacoco 支持字节码插桩与 javaagent 这两种插桩方式。也就是就算没有源代码也可以统计到覆盖率数 据,但是最后分析的时候,还是要结合源代码才能获得更多的覆盖率细节数据。毕竟覆盖率的统计,并 不是只是简单的覆盖率数据本身的指标高低。

jacoco 的工作方式

jacoco 支持四种工作模式

  • file:进程结束的时候在本地生成文件
  • tcpserver:开启端口等待客户端获取覆盖率
  • tcpclient:主动把覆盖率数据发送出去
  • none:不生成覆盖率

很多人都会使用 file 模式,但是 tcp server 模式才是最易用的。因为不需要申请服务器的文件访问权限 就可控制覆盖率数据。你可以根据自己公司的部署情况选择合适的工作模式。

on the fly 插桩模式

on the fly 插桩模式是使用最多的。首先需要在你的被测 java 程序启动的时候,加入 jvm 的一些 javaagent 参数。

-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
destfile
output:file、tcpserver、tcpclient、none
address
port

你可以自己设置适合的工作模式。 离线插桩模式,适合 android 的覆盖率统计,需要借助于 maven、gradle 等构建工具的 instrument 指 令。

jacoco-cli jacoco-cli 是 jacoco 的一个组件,可以在不依赖 maven、gradle 构建工具的情况下完成对代码的分析。 主要用于 tcpserver 工作模式下 用法如下

java -jar jacococli.jar dump [--address <address>] --destfile <path> [--help] \
[--port <port>] [--quiet] [--reset] [--retry <count>]

软件测试 | 常见覆盖率统计工具相关推荐

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

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

  2. 温故而知新:gtest单元测试工具和lcov覆盖率统计工具的结合使用

    一.简介   之所以叫温故而知新,是因为将这两个工具结合起来作为单元测试工具的想法在上一个项目中应用了,好像还没有人将这两种工具结合使用,或者没有写成博客供大家参考,现在重新温习下将想法写下来. gt ...

  3. 多环境多需求并行下的代码测试覆盖率统计工具实现

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 测试覆盖率常被用来衡量测试的充分性和完整性,也是测试有效性的一个度量.「敏捷开发」的大潮之下,如何在快速迭代的同时保证对被测代码的覆 ...

  4. coverage.py - python 单元测试覆盖率统计工具

    前提: 1.假定已经安装好coverage.py(ubuntu 10.10+python.2.7+coverage3.5.1) 2.项目里有模块do.py以及测试它的单元测试模块doTEST.py 命 ...

  5. 最常见的6种网站流量统计工具介绍

    1.CNZZ 服务统计 由国际著名风险投资商IDG 投资的网络技术服务公司,是中国互联网目前最有影响力的免费流量统计技术服务提供商,专注于为互联网各类站点提供专业.权威.独立的第三方数据统计分析. 同 ...

  6. coverity代码检测工具介绍_FOREPOST:一种使用反馈驱动学习软件测试的性能检测工具...

    FOREPOST:一种使用反馈驱动学习软件测试的性能检测工具 摘要 性能测试的一个目标是找出某些特定情况,在这些情况下对于某些输入值组合,应用程序意外地展示出更糟糕的特性.性能测试的一个基本问题是如何 ...

  7. 覆盖率测试工具(coverage tool)

    覆盖率测试工具(coverage tool) java: Emma:优点:1 开源软件:2 支持ANT TASK;Emma 是开源的,同时它对应用程序执行速度的影响非常小. 缺点:1 ANT TASK ...

  8. 【数据竞赛】盘点Kaggle中常见的AutoEDA工具库

    在完成竞赛和数据挖掘的过程中,数据分析一直是非常耗时的一个环节,但也是必要的一个环节. 能否使用一个工具代替人来完成数据分析的过程呢,现有的AutoEDA工具可以一定程度上完成上述过程.本文将盘点常见 ...

  9. python接口测试覆盖率统计_从 jacoco 报告数据分析,python 脚本实现增量覆盖率统计...

    jacoco的增量覆盖率报告实现的逻辑和一些个人想法. jacoco报告分析 从jacococli.jar的使用方法可以看到,导出的文件格式有csv,xml,html等多种格式. 进行尝试后,可以看到 ...

最新文章

  1. java 类与对象题_Java 类与对象 编程练习题
  2. 基于mini2440的看门狗(裸机)
  3. 数据结构Java02【栈、队列、单链表(增删节点)、循环链表、双向循环链表、递归(斐波那契、汉诺塔)】
  4. css 渐变色_如何设置渐变色的单元格值?
  5. 易语言html规则分析,易语言算法原理浅析【一】(示例代码)
  6. C#使用Mutex实例详解
  7. break stop java_怎么break java8 stream的foreach
  8. 深度学习13-cnn介绍(卷积神经网络简介)
  9. ReultSet有什么作用和使用
  10. word表格内插入某月某日星期几_Word文字技巧—如何在Word中自动生成日历
  11. WebRTC教程 - 使用SIPML5
  12. Shapley算法总结
  13. synchronized加锁过程
  14. 关于java中判断一个点是否在一个长方形内和一个长方形是否包含另一个长方形或者两个相重叠的问题。
  15. linux必看书籍推荐
  16. TypeError: ufunc ‘isinf‘ not supported for the input types, and the inputs could not be safely...
  17. Cocos Creator入门实战:桌球小游戏
  18. 花生壳,nat123,srkura frp内网穿透对比(有主观成分
  19. python列表or字符串切片步长为负数的情况分析
  20. NFT Insider #87:The Sandbox 收购游戏开发工作室 Sviper,GHST 大迁徙即将拉开帷幕

热门文章

  1. 邮件服务器评分,邮件评分
  2. 网站服务器间歇性打不开,网站打不开的常见原因之域名解析问题
  3. html+css+js实现狼吃羊小游戏
  4. python面向对象图片_趣味解读Python面向对象编程 (类和对象)
  5. windows server 2016使用RemoteApp
  6. LeetCode 每日一题——535. TinyURL 的加密与解密
  7. laravel 根据时间分组
  8. 冰箱选得好,带娃没烦恼——高知宝妈冰箱选购经验分享
  9. 计算机主机接通显示器位置发,电脑主机接双显示器怎么设置
  10. 最好的休息不是睡觉,而是…...