EMMA功能测试用例覆盖率工具
EMMA功能测试用例覆盖率工具
深圳市**科技有限公司
修订记录 |
||||
版本号 |
变更状态 |
变更描述 |
更新人 |
操作日期 |
V1.0 |
A |
初始创建文档 |
杨建利 |
2017/09/25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
变更状态:A—新增,M—修改,D—删除
目录
1 EMMA简介... 4
2 EMMA优点... 4
3 环境准备... 5
3.1 操作系统... 5
3.2 JDK环境... 5
3.3 WEB应用部署... 7
3.4 EMMA工具配置... 7
3.4.1 EMMA下载... 7
3.4.2 EMMA配置... 8
4 EMMA覆盖率应用... 8
4.1 插桩... 9
4.2 运行... 12
4.3 收集... 13
4.4 报告... 15
5 独立测试用例覆盖率... 21
6 结束语... 33
关于EMMA功能测试覆盖率
1 EMMA简介
EMMA是一个开源、面向Java程序测试覆盖率收集和报告工具。它通过对编译后的Java字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示。
EMMA所使用的字节码插装不仅保证EMMA不会给源代码带来“脏代码”,还确保EMMA摆脱了源代码的束缚,这一特点使EMMA应用于功能测试成为了可能。
2 功能测试用EMMA优点
EMMA收集的数据包括类覆盖率、方法覆盖率、块覆盖率和行覆盖率,这些数据以包为单位进行组织。
大多数功能测试中,测试人员一般不能直接得到被测源代码,源代码也不是测试人员关心的重点。在具体的测试过程中,功能测试人员一般以一个有意义的功能模块作为测试关心的重点,而能够反映一定功能含义的类和方法的覆盖率在功能测试中更有价值。因此,在功能测试中,类覆盖率和方法覆盖率是测试人员关心的重点,行和块覆盖率则作为测试的参考。
测试覆盖率报告中包含了两个方面的内容,测试覆盖的部分和未被测试覆盖的部分。尽管百分之百的测试覆盖率不能代表被测对象完全没有问题,但是测试覆盖的部分以及覆盖比率可以增加测试者对测试工作的信心,指导测试执行以及测试的方向。另一方面,当测试用例执行出现异常时,针对每个测试用例的测试报告还可以提供可疑代码的范围,为代码纠错提供帮助。
测试覆盖率报告中未覆盖的部分也同样有价值:
1)表明测试可能不完整,有些功能、代码没有被测试覆盖到。
2)为测试用例的设计提供指导建议。在覆盖率报告的指导下,测试人员有目的地与开发人员进行讨论,确定未覆盖部分是测试的空白还是不需要测试的部分。
3)帮助开发人员发现无用代码,为修改,完善代码提供依据。
在使用EMMA获得测试覆盖率过程中,类、方法等覆盖的百分比报告,可以方便测试人员更好的评估测试。测试人员通过对照覆盖率报告与测试用例设计文档,需求文档可以迅速找到测试的不足。通过与开发人员进行讨论,可以更好的评估测试力度,并指导进一步的测试。因此在功能测试中引入覆盖率信息,能够完善测试结果报告,确保测试质量和力度,保证测试按质、按量地完成。
3 环境准备
3.1 操作系统
EMMA覆盖率测试工具是由纯Java开发,可运行在任何支持JRE1.6+版本的系统内,包括Windows和Linux系统。
3.2 JDK环境
EMMA覆盖率测试工具运行时需使用JRE,必须配置环境变量。
计算机右键-属性-高级系统设置-环境变量。
1)系统变量新建JAVA_HOME
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.6.0_43
2)系统变量编辑Path
变量名:Path
变量值:;%JAVA_HOME%\bin
3)系统变量新建ClassPath
变量名:ClassPath
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
4)验证安装是否成功
开始->输入cmd->命令提示符窗口输入:java -version。显示以下信息表示JDK安装成功:
3.3 WEB应用部署
使用Tomcat部署客多啦后台管理系统应用,包括prispts和prisptsweb。
3.4 EMMA工具配置
3.4.1 EMMA下载
首先从EMMA网站下载emma.jar包。
EMMA下载地址:
http://www.java2s.com/Code/Jar/e/Downloademmajar.htm
3.4.2 EMMA配置
在执行插装操作之前,首先应该扩展Java虚拟机,即将emma.jar放到被测组件运行使用的JRE目录下面作为JRE的扩展,以便EMMA能够被调用。emma.jar 包含了EMMA核心功能模块的实现和EMMA运行时所需的类文件,这些文件是使用EMMA所必需的。
1) 把emma.jar放到C:\Program Files\Java\jre6\lib\ext目录下。
2)把emma.jar放到web工程项目lib目录下。
Emma.jar放置路径:
D:\oracle\code\27016\prispts\WEB-INF\lib
D:\oracle\code\27016\prisptsweb\WEB-INF\lib
4 EMMA覆盖率应用
EMMA使用基本步骤四步曲:插桩,运行,收集,报告。
EMMA生成文件目录:
1)插桩生成的二进制文件
prispts_coverage.em
2)收集覆盖率信息生成的二进制文件
prispts_coverage.ec
3)生成覆盖率报告的文件
prispts_coverage.html
4.1 插桩
EMMA中提供【instr】命令完成插装操作。插装操作可以面向JAR包、WAR包、类文件和目录。
1)插桩前先启动应用服务,双击桌面图标 启动服务。
2)在命令窗口中cd C:\Program Files\Java\jre6\bin
(或直接配置emma.jar的classpath环境变量)
3)输入插桩命令并按回车键。
java emma instr -m overwrite -ip D:\oracle\code\27016\prispts\WEB-INF\classes -Dmetadata.out.file:D:\Emma\prispts_coverage.em
插桩成果结果显示:(1142个类文件插桩成功)
完成插装操作以后,在指定的路径下会产生一些名为“*coverage.em”的文件,这些文件保存了插装的元信息,这些信息主要是记录插装过程中的插装点在被测代码中的位置。如果在插装过程中,指定这些文件到同一文件的话,EMMA默认将元数据进行合并。如果未指定路径,或者希望得到独立的元文件,这些文件将分别产生在默认或指定的目录下。可以通过使用“merge”命令手动将这些元文件进行合并,保证生成的覆盖率报表的全面性。
命令:java emma merge -input path1>/coverage1.em,<path2>/coverage2.em -out <path>/coverage.em
在“input”后面的参数为待合并的文件名,在“out”后面的参数为合并以后的结果文件。
Emma命令参数:
1)参数“m”代表插装后文件输出的模式。有三个值可供选择:“copy”,“overwrite”和“fullcopy”。其中“copy”和“ fullcopy”这两种模式将会改变插装文件所在的目录,并需要手动为其生成所需的包,使用起来比较复杂。“overwrite” 模式直接用插装后的文件覆盖插装前文件,使用方便。但是由于同一时间生成的文件只能插装一次,在“overwrite”模式下,插装前的文件已经丢失,无法重复插装操作,因此在插装之前先将需要插装的文件和包进行备份。
2)参数“ip”和 “cp”用来提供插装路径,其中“cp”用来指明一个文件夹, “ip” 指定单独的文件或者 JAR 包。
3)参数“Dmetadata.out.file”用来指定插装得到的元数据文件保存的路径。
4)参数“ix”指定文件的包含和排除关系,其中在“+”符号后的文件为包含进的文件,“-”后面的内容为排除在外的文件。支持多个+和-,用逗号分隔。
4.2 运行
一般情况下,直接运行应用程序即可。EMMA会启动一个监听端口用来后面收集信息(ctl),这个端口是固定的47653。
前置条件:确保emma.jar放在tomcat部署prispts的lib目录。
1)启动Tomcat应用服务。
2)打开网站执行功能测试操作。
网站地址:http://192.168.2.240:27016/prispts/
登录账号:admin/666666
4.3 收集
执行收集命令前,应用服务需保持启用状态。
本地覆盖率数据收集命令:
cd C:\Program Files\Java\jre6\bin
java -cp emma.jar emma ctl -connect localhost:47653 –command coverage.get,
D:\Emma\prispts_coverage.ec
收集成功显示: 收集到的信息被保存在 coverage.ec 中。
4.4 报告
生成代码覆盖率报告命令:
cd C:\Program Files\Java\jre6\bin
java -cp emma.jar emma report -r html –in D:\Emma\prispts_coverage.em,
D:\Emma\prispts_coverage.ec -Dreport.html.out.file=D:\Emma\prispts_
coverage.htm
执行成功会显示:
测试报告可以以 html,文本和 xml三种格式输出。
打开prispts_coverage.htm,覆盖率的报告是以包、类、方法三级单位组织的。其中红颜色代表该覆盖率未达到满意的覆盖率标准:
下图是包com.yxd.pris.pts.kedola.flights.service.impl类的执行情况:
下图是包中该类TBizFlightsServiceImpl.java的方法执行情况:
5 结束语
在功能测试过程中,为每个单独的测试用例生成独立的覆盖率报告能够给测试过程带来很大的帮助:
当测试用例失败或者抛出异常时,可以通过覆盖率报告找到该测试用例对应的代码,这样就可以为测试人员提供可能出错代码的范围。这一报告不仅可以帮助测试人员在提交问题时更加详细的描述错误,提供更详细的信息,还可以为开发人员跟踪问题提供线索,缩短解决问题的周期。
测试人员可以从独立的测试报告中获得代码和功能模块的对应关系,更好的理解测试用例的作用。
独立的测试报告可以帮助测试人员改进测试用例的设计,删除重复的测试用例,将覆盖点较多的测试用例进行拆分。