自动化测试之路——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” 用来指定插装得到的元数据文件保存的路径。
测试的环境 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” 用来指定插装得到的元数据文件保存的路径。
相关文章推荐
- Java 完美判断中文字符
- java中static{}语句块详解
- java.security.InvalidKeyException: Illegal key size
- JAVA中读写EXCEL
- java泛型
- Jfinal框架学习笔记二
- Spring MVC-----基础注解
- Java读取Excel内容
- Jfinal初始学习笔记一
- Spring@Autowired注解与自动装配
- java基础中容易混淆的知识点
- 深入JAVA虚拟机笔记
- Java 命令参考
- Java抽象类和接口
- java类加载机制
- Spring MVC-----@SessionAttributes注解
- 《理解Java虚拟机》第二章读书笔记:Java内存区域与内存溢出
- Eclipse报错:gc overhead limit exceeded eclipse
- java对象引用的类型
- Spring MVC -----@ModelAttribute注解