您的位置:首页 > 编程语言 > Java开发

自动化测试之路——EMMA在java代码覆盖率自动化测试中的应用(一)

2016-03-03 16:48 501 查看
不同于传统的用例手工测试,EMMA使得自动搜集java代码覆盖率成为了可能,代码覆盖率的搜集使得测试人员对代码质量有更好的把握。

测试的环境 jdk1.8 Ant 1.9 EMMA stable-2.1.5320

安装jdk和Ant可以按照官网的介绍进行安装

1.使用emma的原因

根据官方网站的介绍,EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码带来“脏代码”,还确保 EMMA
摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试成为了可能。因而,在我们进行功能测试的时候,可利用emma收集代码在运行过程中所走的路径。

2.安装emma

官方网站上可以找到emma的下载地址,下载后包括两个文件,一个是emma.jar,另一个是emma_ant.jar. 后面的一个文件是在使用ant工具进行编译时需要用到的jar包。

下载后可以将emma.jar包放在java安装文件下jre\lib\ext下面,这样就无需每次使用emma时都需要包含jar包。当然如果不放在就ext目录下,需要使用命令 java-cp emma.jar将其包含进去。

3.基本的emma命令的使用

emma工具主要有两种使用模式:on-the-fly(在运行java程序时插装获取测试信息)以及off-line(经过插装,然后在动态加载的方式获得测试信息).

1)on-the-fly模式

使用的是emmarun方法,运行可执行的jar包获得txt的覆盖率报告。



上面个之所以有依赖emma.jar包是因为笔者在学习之前未将它放在java安装目录ext之下。注意:此时的emma.jar包一定是在命令执行目录下。生成的txt结果如下:



可以看到显示了一个大致的覆盖率统计报告,这是emmarun默认的显示结果。当然,这个报告并未展现具体的细节,因而我们常常利用emma工具生成html文档。

2)off-line模式

emma的off-line运行时需要采用先插装,后运行,再获得代码覆盖率的结果。

插装的方法:对类插装、对可执行的jar包进行插装、对war包或ear包插装。

对类进行插装

对于类文件进行代码覆盖率测试时,使用如下命令进行插装

Java –cp emma.jar emma instr –m overwrite –ip emmaTest (其中 -cp emma.jar 表示将jar包放入到jre中,Test为测试类的文件夹)

我们在emmaTest中放入了若干java程序作为测试用例



再次执行一次就显示源文件已经损坏,由此可以判断,这种方法修改了原始的class文件,所以做测试前务必要备份。



对jar包进行插装

插入可执行的JAR包

java –cp emma.jar emma instr –m overwrite –cp spider.jar –Dmetadata.out.file=spider_coverage.em

我们可以看到,spider.jar最初的大小是2kb





对war或ear包进行插装

由于war是java web生成的数据包,需要配置相关的文件,在此仅对该操作命令进行说明。

java -cp emma.jar emma instr -m overwrite -ip East.war-Dmetadata.out.file=east_coverage.em



选择性插装,只需要选择特定的几个类进行代码覆盖测试

java -cp emma.jar emma instr -m overwrite –cp spider.jar –ix+org.spider.service.* -Dmetadata.out.file=east_coverage.em

此条命令仅仅是插装service后面的指定的类即可

Ø 参数 “m”代表插装后文件输出的模式。有三个值可供选择: “copy” ,“overwrite” 和 “fullcopy” 。其中,“copy” 和 “ fullcopy” 这两种模式将会改变插装文件所在的目

录,并需要测试人员手动为其生成所需的包,使用起来比较复杂。“overwrite” 模式直接用插装后的文件覆盖插装前文件,使用方便。但是由于同一时间生成的文件

只能插装一次,在 “overwrite”模式下,插装前的文件已经丢失,测试人员无法重复插装操作,因此建议在插装之前先将需要插装的文件和包进行备份。

Ø 参数 “ip” 和 “cp” 用来提供插装路径,其中“cp” 用来指明一个文件夹, “ip” 指定单独的文件或者 JAR 包。

Ø 参数“Dmetadata.out.file” 用来指定插装得到的元数据文件保存的路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: