多语言展示
当前在线:1466今日阅读:26今日分享:39

功能测试代码覆盖率统计工具-EMMA

功能测试代码覆盖率统计工具-EMMA
工具/原料

测试覆盖率是评价测试完整性的重要的度量标准之一。 EMMA 是一个面向 Java 代码的测试覆盖率收集工具。在测试过程中,使用 EMMA 能使收集和报告测试覆盖率的过程更加灵活、简单。EMMA 是一个开源、面向 Java 程序测试覆盖率收集和报告工具。它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示。 EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码带来“脏代码”,还确保 EMMA 摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试成为了可能。

方法/步骤
1

监控JAVA后台程序步骤:1、将emma.jar放到$JAVA_HONE/jre/lib/ext目录下2、java emma instr -m overwrite -cp /root/VDS-2.0/lib/VDS-2.0.jar -Dmetadata.out.file=vds.em3、启动VDS,在启动VDS时,/root/VDS-2.0/bin/startup.sh4、运行功能测试用例5、收集数据:java  emma ctl -connect localhost:47653 -command coverage.get,/root/dingbs/tool/emma/vds.ec6、转换结果:java -cp emma.jar emma report -r html -in /root/dingbs/tool/emma/vds.em,/root/dingbs/tool/emma/vds.ec -Dreport.html.out.file=/root/dinbs/tool/emma/vds.html

2

监控JAVA WEB程序   WEB程序部署到Tomcat或者SunOne后,都会将war文件进行解压缩,因此我们监控的为里面的class文件1、启动emma[root@msspora tool]# java emma instr -m overwrite -ip /root/apache-tomcat-6.0.10/webapps/CMCC/WEB-INF/classes -Dmetadata.out.file=webcmcc.emEMMA: processing instrumentation path …EMMA: instrumentation path processed in 523 msEMMA: [159 class(es) instrumented, 0 resource(s) copied]EMMA: metadata merged into [/root/dingbs/tool/webcmcc.em] {in 44 ms}2、启动Tomcat,/root/apache-tomcat/bin/startup.sh3、使用IE进行功能测试4、收集数据:java  emma ctl -connect localhost:47653 -command coverage.get,/root/dingbs/tool/emma/webcmcc.ec5、转换结果:java -cp emma.jar emma report -r html -in /root/dingbs/tool/emma/webcmcc.em,/root/dingbs/tool/emma/webcmcc.ec -Dreport.html.out.file=/root/dinbs/tool/emma/webcmcc.html

4

EMMA日志1、附件emma_default.properties的verbosity.level设置为TRACE32、在启动的时候,增加-Demma.properties=./emma_default.properties,例如:java -Demma.properties=./emma_default.properties emma instr -m overwrite -cp /root/VDS-2.0/lib/VDS-2.0.jar -Dmetadata.out.file=newtest.em

注意事项
1

常见问题:

2

Q1:我在进行第一步注入的时候(java emma instr),没找到类怎么办([0 class(es) instrumented, 0 resource(s) copied])?

3

A1:首先找到确认原因,方法采用打开emma的详细日志输出来确认,具体见上面。 到目前遇到的情况包含下面几个方面 :emma的版本不行,建议采用2.1.5320,具体文件;监控的目录不存在任何类,需要在执行前确认该目录下是否有类;已经注入过一次,在进行注入时,会提示注入0 class.

4

Q2:在进行结果采集的时候,提示ctl 命令不存在,是怎么回事?

5

A2:emma2.0版本不提供ctl命令,请下载最新的2.1.5320进行测试。

6

Q3:使用sunone容器,如何知道应用程序的位置?

7

A3:sunone在程序发布后,会将war解压放到$SUNONE_HOME/domains/domainN/applications/j2ee-modules目录下。对于WEB应用的代码覆盖,需要确认开发人员是将用到的类,放到了WEB-INF/classes目录下还是打成jar包的形式,如果是前者参考监控JAVA WEB程序,如果是后者参考监控JAVA后台程序

8

Q4: EMMA是否支持条件覆盖?

9

A4:在EMMA的测试报告中,目前看不出来,如果关联了代码,。对于if(a||b)这样的语句,如果只满足a套件,那么emma只会把标为黄色,表示部分覆盖。

10

Q5:使用-sourcepath后,结果里面没有关联上代码?

11

A5:先检查关联的目录里面是否有相应的类文件,如果有请在检查指定的目录必须是包括 最外面package的目录,因此建议 采用和ecipse相同的目录,即src目录下是包和类。

12

Q6:使用的时候,如何代码或者注释出现汉字,report会出现乱码,如何解决?

13

A6:首先确认源代码的编码方式,找开发人员确认是GBK的还是UTF-8的。其次Emma生成结果的编码方式默认是ISO-8859-1,可以通过修改配置文件emma_default.properties里面report.html.out.encoding: UTF-8进行修改,最后确认操做系统的LANG环境变量值,如果编码是GBK,那么LANG=zh_CN.GBK,如果编码是UTF-8,那么LANG=zh_CN.UTF-8

推荐信息