代码覆盖率-EMMA
一、 出了什么问题?
对于测试人员 测试完一个项目后,如何确保所有的功能都被测试到?
对于开发人员 辛辛苦苦写的代码如何知道有没有运行过?
代码优化从何处开始?
二、 EMMA是什么?
EMMA 是一个用于检测和报告 JAVA 代码覆盖率的开源工具。
它不但能很好的用于小型项目,很方便得得出覆盖率报告,而且适用于大型企业级别的项目。
EMMA 有许多优点,首先你能免费得到它,并把它用于自己项目的开发。
它支持许多种级别的覆盖率指标:包,类,方法,语句块(basic block)和行,特别是它能测出某一行是否只是被部分覆盖,如条件语句短路的情况。
它能生成 text,xml,html 等形式的报告,以满足不同的需求,其 html 报告提供下钻功能,我们能够从 package 开始一步步链接到我们所关注的某个方法。
EMMA 能和 Makefile 和 Ant 集成,便于应用于大型项目。特别还须指出的一点是,EMMA 的效率很高,这对于大型项目来说很重要。
三、 为什么用EMMA
EMMA 是一个开源、面向 Java 程序测试覆盖率收集和报告工具。
它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示。
EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码带来“脏代码”,还确保 EMMA 摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试成为了可能。
四、 可以怎么用EMMA
On-the-fly 模式
Offline 模式
使用emma基本步骤
1、插装字节码到想要测试覆盖率的文件-> 生成coverage.em 文件
插装操作可以面向 JAR 包、 WAR 包、 WAR 包、类文件和目录
2、按正常的工作流程启动服务器,测试程序。
3、收集覆盖率信息->生成coverage.ec文件
可以在本机收集,也可以从远程机器收集
4、生成覆盖率报告->通过coverage.em 和 coverage.ec文件
五、 看一个例子
(一) (准备环境)
下载EMMA 目前最新开发版本[emma-stable-2.1.5320-lib.zip 2005-06-22 463.2 KB]
http://sourceforge.net/projects/emma/files/emma-testing/2.1.5320/
注意:当前的release版本并不支持 主动收集覆盖率信息 的功能;
下载的文件 emma-stable-2.1.5320-lib.zip
emma.jar (EMMA 核心功能模块的实现和 EMMA 运行时所需的类文件)
emma_ant.jar (emma与ant 结合使用的辅助包)
把emma.jar 设置到 classpath中,或者扩展到Java 虚拟机中(即将 emma.jar 放到被测组件运行使用的JRE 目录下)
(二) (插装)
EMMA 中提供了 “instr” 命令完成插装操作
1、插装目录和类文件
对于类文件,通过指定类文件所在的目录实现
java emma instr -m overwrite –ip [文件路径或class文件] -Dmetadata.out.file=[文件路径和文件名] .em
java emma instr -m overwrite –ip classes -Dmetadata.out.file=c:\coverage.em
2、插装 JAR
JAR 包可以作为一个整体进行插装。通过对整个 JAR 进行插装,可以避免对 JAR 包进行解压和压缩的过程,提高插装效率。
java emma instr -m overwrite –cp [文件路径和文件名].jar Dmetadata.out.file=[文件路径和文件名].em
java emma instr -m overwrite -ip lib\lib1.jar;lib\lib2.jar -Dmetadata.out.file=c:\coverage.em
3、插装 WAR/EAR 包
由于 WAR/EAR 包需要运行在特定的环境中,所以在进行插装之前,需要先将其安装在特定的 J2EE 容器中,然后将其看作目录进行插装。
java emma instr -m overwrite \ -ip [文件路径和文件名].war -Dmetadata.out.file=[文件路径和文件名].em
java emma instr -m overwrite \ -ip test.war -Dmetadata.out.file=c:\coverage.em
4、选择性的插装
EMMA 支持对整个 JAR 包和目录进行插装,但如果在 JAR 包或者目录中包含系统的文件或者测试过程中不关心的文件时,应该进行选择性插装,因为这些文件的存在会影响测试结果的百分比。 EMMA 提供了选择插装的选项,实现选择性插装。
java emma instr -m overwrite -cp test.jar -ix +com.test.* -Dmetadata.out.file=[文件路径和文件名].em
java emma instr -m overwrite -cp test.jar -ix +com.test.* -Dmetadata.out.file=c:\coverage.em
参数 “m”代表插装后文件输出的模式。有三个值可供选择: “copy” ,“overwrite” 和 “fullcopy” 。其中,“copy” 和 “ fullcopy” 这两种模式将会改变插装文件所在的目录,并需要测试人员手动为其生成所需的包,使用起来比较复杂。“overwrite” 模式直接用插装后的文件覆盖插装前文件,使用方便。但是由于同一时间生成的文件只能插装一次,在 “overwrite”模式下,插装前的文件已经丢失,测试人员无法重复插装操作,因此建议在插装之前先将需要插装的文件和包进行备份。
参数 “ip” 和 “cp” 用来提供插装路径,其中 “cp” 用来指明一个文件夹, “ip” 指定单独的文件或者 JAR 包。
参数 “Dmetadata.out.file” 用来指定插装得到的元数据文件保存的路径。
EMMA 中通过 “ix” 参数指定文件的包含和排除关系,其中在 “+” 符号后的文件为包含进的文件, “-” 后面的内容为排除在外的文件。
__________________________________________________
这个不能用
import com.wyim.msg.csim_admin.thrift.CsimAdminService;
__________________________________________________
(三) (合并元数据)
完成插装操作以后,在指定的路径下会产生一些名为 “*coverage.em” 的文件,这些文件保存了插装的元信息,这些信息主要是记录插装过程中的插装点在被测代码中的位置。如果在插装过程中,指定这些文件到同一文件的话, EMMA 默认将元数据进行合并。如果测试人员未指定路径,或者希望得到独立的元文件,这些文件将分别产生在默认或指定的目录下。测试人员还可以通过使用 “merge” 命令手动将这些元文件进行合并,保证生成的覆盖率报表的全面性。注意:合并操作不支持逆向操作。
合并元数据命令
Java emma merge -input <path1>/coverage1.em,<path2>/coverage.em -out <path>/coverage2.em
Java emma merge -input c:/coverage1.em,c:/coverage2.em -out c:/coverage.em
在 “input” 后面的参数为待合并的文件名,在 “out” 后面的参数为合并以后的结果文件。
(四) (运行测试用例)
完成插装工作以后,测试人员可以按照测试计划运行测试用例。
EMMA 将在测试执行的过程中记录代码执行信息并将结果记录在内存中。
每次当 JVM 停止时,内存中记录的执行信息将被清除并被保存到 “*.ec” 的文件中。
实际测试的过程中, JVM 的停止很难控制,因此测试人员可以定时手动将内存中执行信息写出。在这种情况下,内存中的记录被输出,但是内存中的内容不被清除。
(五) (收集覆盖率信息)
从远程机器上收集覆盖率信息
java emma ctl –connect ip:47653 -command coverage.dump,[文件路径]/coverage.ec
java emma ctl –connect 192.168.61.123:47653 -command coverage.dump, c:/coverage.ec
从本地收集覆盖率信息
java emma ctl –connect [本机IP]:47653 -command coverage.get,[文件路径]/coverage.ec
java emma ctl -connect localhost:47653 -command coverage.get,c:\emma\coverage.ec
注:收集信息时服务一定是开启状态,否则会报错:
emma ctl: coverage.get: RPC failure while executing [coverage.get]
(六) (生成覆盖率报告)
测试报告可以以 HTML ,文本和 XML 三种格式输出
java -cp emma.jar emma report -r txt,html,xml -in [文件路径和文件名].em, [文件路径和文件名].ec - Dreport.html.out.file=[报表路径和报表名].html -Dreport.metrics=class:[合格率](,method:[合格率])
java emma report -r html -in c:/coverage.em,c:/coverage.ec - Dreport.html.out.file=c:/emma/coverage.html -Dreport.metrics=class:80,method:75
如下会在当面目录下生成报表文件
java emma report -r txt,html -in coverage.em -in coverage.ec
可以根据测试要求通过 “Dreport.metrics” 参数设定满意的覆盖率标准。在示例命令中设定了类覆盖率的满意度为80%。
红颜色代表该覆盖率未达到满意的覆盖率标准
六、 ECLIPSE安装EMMA插件
Help→Software updates→Find and Install...→Search for new features to install→next→New Remote Site...
name:eclemma
URL:http://update.eclemma.org/
参考资料
http://emma.sourceforge.net/
http://www.ibm.com/developerworks/cn/opensource/os-cn-emma/index.html#download
分享到:
相关推荐
Emma 进行代码覆盖率检查(命令行方式) Emma 是一款 Java 代码覆盖率检查工具,可以帮助开发者了解代码的覆盖率情况,从而提高代码的质量。在 Offline 模式下使用 Emma 进行代码覆盖率检查需要经过三个步骤:插桩...
用户代码覆盖率测试 ,开源可重写,对于产品质量控制非常重要
【Emma Java代码覆盖率统计】 Emma 是一款开源的 Java 代码覆盖率工具,专为评估和报告 Java 代码的测试覆盖率而设计。它适用于各种规模的项目,从小型项目到大型企业级应用,都能提供准确的覆盖率数据。Emma 提供...
在介绍EMMA这一开源覆盖率工具的基础上,本文主要探讨了如何在实际Java项目中使用EMMA进行代码覆盖率统计,强调了功能测试中类覆盖率和方法覆盖率的重要性,并介绍了EMMA在环境准备、工具配置、测试执行和覆盖率报告...
EMMA是Java应用程序的一种代码覆盖率工具,用于度量单元测试对源代码的覆盖程度。它提供了类、方法、行和条件级别的覆盖率统计,帮助开发者确保测试的全面性和有效性。这篇转自iteye博客的文章,标题为“[转]EMMA...
本文主要探讨了如何利用代码覆盖率工具EMMA来进行测试,并详细介绍了在Android工程中使用EMMA进行单元测试覆盖率检查的步骤。 EMMA是一个开源的Java程序测试覆盖率工具,它通过字节码插装技术在运行时收集覆盖率...
Emma 是一个著名的代码覆盖工具,支持 Java 语言,并能提供非常详尽的报告。EclEmma 结合了 Eclipse 的强大功能,使得代码覆盖测试变得更加直观和高效。 #### 三、EclEmma的基本使用步骤 1. **创建Java项目**:...
EMMA,全称为Emma Metrics for Java,是一款开源的代码覆盖率工具,专为Java应用程序提供精确的测试覆盖率报告。 EMMA的核心功能在于收集和分析执行单元测试后的代码覆盖数据,包括行覆盖率、分支覆盖率、方法覆盖...
在EclEmma中,`emma.jar`是一个关键组件,它是Emma代码覆盖率工具的核心库,包含了计算和报告代码覆盖率所需的类和方法。Emma是一个开源的Java代码覆盖率工具,可以收集和展示Java应用程序的执行情况,包括哪些代码...
《Emma:一个强大的Java代码覆盖率工具》 Emma是一款广泛使用的Java代码覆盖率工具,它能够帮助开发者在测试过程中了解代码的覆盖率情况,确保测试的全面性和有效性。标题中的"emma-stable-2.1.5320-lib.zip"是Emma...
- `emma-1.21.jar`:这是Emma的主要库,包含了代码覆盖率收集和分析所需的所有核心功能,版本为1.21。 - `emma_ant.jar`:如前所述,这个文件是Emma与Ant的集成,用于在Ant构建过程中添加代码覆盖率支持。 综上所...
EMMA,全称为Emma Metrics for Measuring and Managing,是一个广泛使用的开源工具,专门设计用于评估Java应用程序的代码覆盖率。在软件开发过程中,测试是至关重要的一步,而代码覆盖率则是衡量测试质量的重要指标...
### 软件测试中的自动化测试与代码覆盖率 #### 第一章:软件测试中的自动化测试与代码覆盖率 **自动化测试**是指使用特定的工具或脚本来执行预定义的测试用例,以验证软件产品的功能是否符合预期的行为。这种方式...
总结来说,"emma-2.0.5312-lib.zip" 包含了稳定版本的 Emma 库,用于进行 Java 代码覆盖率分析。通过 `emma.jar` 和 `emma_ant.jar` 文件,开发者能够轻松地将其集成到他们的开发和测试流程中,以提高软件质量,并...
Emma是一款强大的开源代码覆盖率工具,用于度量Java应用程序的代码覆盖率。Emma支持多种测试框架,并且能够很好地与持续集成环境和其他开发工具结合使用。通过Emma,开发者可以清晰地了解哪些部分的代码已经经过了...
2. **Java代码覆盖率工具**:Java平台上有多种代码覆盖率工具,如JaCoCo、Cobertura、Emma等。这些工具通过插入字节码或代理类的方式收集覆盖率数据,然后生成报告展示未被测试覆盖的代码。JaCoCo是目前较为流行的一...