最近在做代码覆盖率测试集成,看了一些文章,此处只做整理,方便以后查询使用。
ps:前人种树,后人乘凉,感谢!
查看的一些文章:
http://www.cnblogs.com/morebetter/archive/2013/06/26/3156756.html
http://www.ibm.com/developerworks/cn/opensource/os-cn-emma/
http://lishiguang.iteye.com/blog/1123641
http://colin2wang.iteye.com/blog/627618
http://m.blog.csdn.net/blog/dawnming/7943589
http://www.tuicool.com/articles/3YJRfuU
http://blog.sina.com.cn/s/blog_4692ea0a0101iusi.html
http://jingyan.baidu.com/article/49ad8bce6b392a5834d8fa0e.html
http://www.cnblogs.com/morebetter/archive/2013/06/26/3156756.html
以下为对上边文章的搜集和验证:
//0.插装准备
将emma.jar 放到 “../java/jre/lib/ext” 下面。
//1.插装
// 1.1对类文件插装命令
java emma instr -m overwrite -ip D:/Appium/UATProj/testUpload/WebRoot/WEB-INF/classes/org/yyx/upload -Dmetadata.out.file=D:/emma/testUpload/coverage.em
// 1.2对 JAR 包插装命令
java emma instr -m overwrite -cp D:/emma/emma.jar -Dmetadata.out.file=D:/emma/testUpload/coverage.em
// 1.3对 WAR/EAR 包插装命令
java emma instr -m overwrite -ip D:/emma/MyDWRSample.war -Dmetadata.out.file=D:/emma/MyDWRSample/coverage.em
// 1.4选择插装命令
java emma instr -m overwrite -cp TestWs.jar -ix +org.wstest.service.* -Dmetadata.out.file=/root/emma/Number_coverage.em
// 1.5合并元数据
java emma merge -input c:/coverage1.em,c:/coverage2.em -out c:/coverage.em
//2.运行测试用例
//3.收集覆盖率信息
// 3.1从本地收集
java emma ctl -connect localhost:47653 -command coverage.get,D:/emma/testUpload/coverage.ec
// 3.2从远程机器上收集
java emma ctl -connect 192.168.61.123:47653 -command coverage.dump,D:/emma/testUpload/coverage.ec
//4.生成覆盖率报告
java emma report -r html -in D:/emma/testUpload/coverage.em,D:/emma/testUpload/coverage.ec - Dreport.html.out.file=c:/emma/testUpload/coverage.html -Dreport.metrics=class:80,method:75
//5.清除内存中覆盖率信息命令
java emma ctl -connect localhost:47653-command coverage.reset
//6.合并覆盖率结果命令
java emma merge –input coverage1.ec,coverage2.ec,coverage3.ec –output coverage.ec
ps:
a.本次关注点
1.插装-对类文件插装命令 2.运行测试用例 3.收集覆盖率信息 4.生成覆盖率报告
b.使用emma时遇到几个问题
1、没法直接操作war包,如果对war包进行instr,提示说处理了0个文件,所以只好把war包解压以后再处理
2、在windows下tomcat不能自动得到coverage.ec文件,需要使用命令手动获取。
//插装 运行 收集
1.
cd D:\eclipse-standard-kepler-SR2-win32\apache-tomcat-6.0.35\webapps
java emma instr -m overwrite -ip testUploado\WEB-INF\classes\org\yyx\upload\ -Dmetadata.out.file=coverage.em
java emma ctl -connect localhost:47653 -command coverage.get,coverage.ec
ok!
java emma instr -m overwrite -ip testUploado\WEB-INF\classes -Dmetadata.out.file=coverage.em
java emma ctl -connect localhost:47653 -command coverage.get,coverage.ec
ok!
java emma instr -m overwrite -ip testUploado\WEB-INF\classes -Dmetadata.out.file=D:/emma/testUpload/coverage.em
java emma ctl -connect localhost:47653 -command coverage.get,D:/emma/testUpload/coverage.ec
ok!
2.
java emma instr -m overwrite -ip D:\eclipse-standard-kepler-SR2-win32\apache-tomcat-6.0.35\webapps\testUploado\WEB-INF\classes -Dmetadata.out.file=D:/emma/testUpload/coverage.em
java emma ctl -connect localhost:47653 -command coverage.get,D:/emma/testUpload/coverage.ec
ok!
3.
cd D:\eclipse-standard-kepler-SR2-win32\apache-tomcat-6.0.35\webapps\testUploado\WEB-INF
java emma instr -m overwrite -ip classes -Dmetadata.out.file=D:/emma/testUpload/coverage.em
java emma ctl -connect localhost:47653 -command coverage.get,D:/emma/testUpload/coverage.ec
ok!
4.
cd D:\eclipse-standard-kepler-SR2-win32\apache-tomcat-6.0.35\webapps\testUploado
java emma instr -m overwrite -ip WEB-INF\classes -Dmetadata.out.file=D:/emma/testUpload/coverage.em
java emma ctl -connect localhost:47653 -command coverage.get,D:/emma/testUpload/coverage.ec
ok!
5.
java emma instr -m overwrite -ip testUploado.war -Dmetadata.out.file=c:\coverage.em
fall!
本次测试说明:
对于war包插装,emma搞不定,没有说得那没牛
6.
(Tomcat Project)
java emma instr -m overwrite -ip D:\eclipse-standard-kepler-SR2-win32\apache-tomcat-6.0.35\webapps\testUpload\WEB-INF\classes -Dmetadata.out.file=D:/emma/testUpload/coverage.em
java emma ctl -connect localhost:47653 -command coverage.get,D:/emma/testUpload/coverage.ec
fall!
(Dynamic Web Projec)
java emma instr -m overwrite -ip D:\eclipse-standard-kepler-SR2-win32\apache-tomcat-6.0.35\webapps\testUploadz\WEB-INF\classes -Dmetadata.out.file=D:/emma/testUpload/coverage.em
java emma ctl -connect localhost:47653 -command coverage.get,D:/emma/testUpload/coverage.ec
ok!
本次测试说明:
eclipse新建Web项目时,必须建立为Dynamic Web Project项目,
而不能使用tomcat插件建立Tomcat Project,
否则收集覆盖率信息时报错:
"emma ctl:coverage.get: RPC failure while executing [coverage.get]
Exception in thread "main" com.vladium.emma.EMMARuntimeException: coverage.get:
RPC failure while executing [coverage.get]
at com.vladium.emma.ctl.CtlProcessor._run(CtlProcessor.java:242)"
没有尝试直接通过ant或maven打包是否有问题,有待检验
//生成
java emma report -r html -sp D:\eclipse-standard-kepler-SR2-win32\apache-tomcat-6.0.35\webapps\testUploadz\src -in D:\emma\testUpload\bak6\coverage.em,D:\emma\testUpload\bak6\coverage.ec -Dreport.html.out.encoding=utf-8 -Dreport.html.out.file=D:\emma\testUpload\bak6\coverage.html -Dreport.metrics=class:80,method:75
ps:
1.emma在jdk1.7以上版本运行问题及解决方案 :
-XX:+UseSplitVerifier
语法:
java -XX:+UseSplitVerifier emma report -r html -sp D:\eclipse-standard-kepler-SR2-win32\apache-tomcat-6.0.35\webapps\testUploadz\src -in D:\emma\testUpload\bak6\coverage.em,D:\emma\testUpload\bak6\coverage.ec -Dreport.html.out.encoding=utf-8 -Dreport.html.out.file=D:\emma\testUpload\bak6\coverage.html -Dreport.metrics=class:80,method:75
2.内存不够解决方案:
-Xmx500m -Xms256m
语法:
java -Xmx500m -Xms256m emma report -r html -sp D:\eclipse-standard-kepler-SR2-win32\apache-tomcat-6.0.35\webapps\testUploadz\src -in D:\emma\testUpload\bak6\coverage.em,D:\emma\testUpload\bak6\coverage.ec -Dreport.html.out.encoding=utf-8 -Dreport.html.out.file=D:\emma\testUpload\bak6\coverage.html -Dreport.metrics=class:80,method:75
3.解决emma的coverage report 代码文件乱码的问题
下载emma-2.0.5312-src.zip http://pkgs.fedoraproject.org/repo/pkgs/emma/
修改core\java12\com\vladium\emma\report\html\ReportGenerator.java的embedSrcFile方法
修改前
in = new BufferedReader (new FileReader (srcFile), IO_BUF_SIZE);
修改后
in = new BufferedReader (new java.io.InputStreamReader(new java.io.FileInputStream(srcFile), m_settings.getOutEncoding ()), IO_BUF_SIZE);
修改后编译,解压emma.jar并替换其中相应的文件重新打包即可。可直接替换emma-2.1.5320版本jar文件,已测试。
采用此jar后,可在java emma report 命令中传入-Dreport.html.out.encoding=utf-8 ,也可直接修改emma.jar中emma_default.properties文件的report.html.out.encoding: ISO-8859-1,改为你程序所使用的编码格式即可。
分享到:
相关推荐
通过Emma的命令行方式,开发者可以方便地进行代码覆盖率的检查,其操作流程主要分为三个步骤:插桩、运行测试、以及合并覆盖率统计数据和输出统计报告。 首先,我们来谈谈什么是代码覆盖率检查。简单来说,它是一种...
《Emma:一个强大的Java代码覆盖率工具》 Emma是一款广泛使用的Java代码覆盖率工具,它能够帮助...通过"emma.jar"和"emma_ant.jar",开发者可以方便地在开发环境中集成Emma,进行高效的代码覆盖率测试,提升软件质量。
标题中的“[转]EMMA测试代码覆盖率的脚本”表明了这个压缩包文件与EMMA工具和代码覆盖率测试有关。EMMA是一个开源的Java代码覆盖率工具,它可以帮助开发者了解在自动化测试中哪些代码被执行过,哪些没有被执行,从而...
1. `emma.jar`:这是 Emma 的核心库文件,包含了 Emma 执行代码覆盖率分析所需的所有组件。开发者可以通过这个 JAR 文件在运行时动态收集覆盖率数据。 2. `emma_ant.jar`:这个文件是为了与 Apache Ant 构建工具集成...
Emma是一款广泛应用于Java项目的开源代码覆盖率工具,它能够帮助开发者评估单元测试的质量。Emma提供了一种高效且精确的方式来衡量代码在测试中的执行情况,即测试覆盖率,这包括了哪些代码被测试用例执行过,以及...
EMMA,全称为Emma Metrics for Java,是一款开源的代码覆盖率工具,专为Java应用程序提供精确的测试覆盖率报告。 EMMA的核心功能在于收集和分析执行单元测试后的代码覆盖数据,包括行覆盖率、分支覆盖率、方法覆盖...
在介绍EMMA这一开源覆盖率工具的基础上,本文主要探讨了如何在实际Java项目中使用EMMA进行代码覆盖率统计,强调了功能测试中类覆盖率和方法覆盖率的重要性,并介绍了EMMA在环境准备、工具配置、测试执行和覆盖率报告...
Emma 是一款开源的 Java 代码覆盖率工具,专为评估和报告 Java 代码的测试覆盖率而设计。它适用于各种规模的项目,从小型项目到大型企业级应用,都能提供准确的覆盖率数据。Emma 提供了多种级别的覆盖率指标,包括包...
本文主要探讨了如何利用代码覆盖率工具EMMA来进行测试,并详细介绍了在Android工程中使用EMMA进行单元测试覆盖率检查的步骤。 EMMA是一个开源的Java程序测试覆盖率工具,它通过字节码插装技术在运行时收集覆盖率...
标题中的“emma统计手工测试或Ui测试覆盖率”指的是Emma,一个开源的Java代码覆盖率工具,它可以帮助开发者衡量单元测试和集成测试对代码的覆盖程度。Emma可以与JUnit、TestNG等测试框架配合使用,提供类、方法、行...
**代码覆盖率工具**对于提升软件质量和测试效果至关重要。它们可以帮助开发人员和测试工程师了解测试用例的覆盖情况,从而识别未被测试的代码部分。常见的覆盖率工具包括 JaCoCo、Emma 和 Cobertura。 **配置代码...
Emma是一个广泛使用的Java代码覆盖率工具,它提供了对Java应用程序单元测试的覆盖率分析。通过集成Ant构建工具,开发者能够方便地在他们的构建流程中插入代码覆盖率检查。 1. **Emma工具介绍** Emma是一个开源项目...
2. **Java代码覆盖率工具**:Java平台上有多种代码覆盖率工具,如JaCoCo、Cobertura、Emma等。这些工具通过插入字节码或代理类的方式收集覆盖率数据,然后生成报告展示未被测试覆盖的代码。JaCoCo是目前较为流行的一...
EMMA是一款专为Java开发设计的...总的来说,EMMA作为一个强大的Java代码覆盖率统计工具,能够帮助开发者更有效地进行单元测试,提升软件的质量和可靠性。通过深入理解和应用EMMA,可以为项目的测试工作提供有力的支持。
在EclEmma中,`emma.jar`是一个关键组件,它是Emma代码覆盖率工具的核心库,包含了计算和报告代码覆盖率所需的类和方法。Emma是一个开源的Java代码覆盖率工具,可以收集和展示Java应用程序的执行情况,包括哪些代码...