2017拉

代码覆盖率-EMMA,质量可视化

上一篇 / 下一篇  2015-09-22 12:51:31 / 个人分类:测试环境部署

 一、 出了什么问题?
C&\|!]QT.f4Yy0 对于测试人员 测试完一个项目后,如何确保所有的功能都被测试到?51Testing软件测试网smmbC}3JBH!@
 对于开发人员 辛辛苦苦写的代码如何知道有没有运行过?51Testing软件测试网(ow2F'A{qA o M"}
 代码优化从何处开始?51Testing软件测试网1V)Q'n1|e4wiW
51Testing软件测试网"j0iLvN*V9~
二、 EMMA是什么?
/s:f&EQA\+z+H0 EMMA 是一个用于检测和报告 JAVA 代码覆盖率的开源工具。51Testing软件测试网2k&mq@ U.~ t [Zy
 它不但能很好的用于小型项目,很方便得得出覆盖率报告,而且适用于大型企业级别的项目。
m.y%U {o0 EMMA 有许多优点,首先你能免费得到它,并把它用于自己项目的开发。51Testing软件测试网sv-| Z#Kk&]
 它支持许多种级别的覆盖率指标:包,类,方法,语句块(basic block)和行,特别是它能测出某一行是否只是被部分覆盖,如条件语句短路的情况。
mVjS)y5c"D0 它能生成 text,xml,html 等形式的报告,以满足不同的需求,其 html 报告提供下钻功能,我们能够从 package 开始一步步链接到我们所关注的某个方法。51Testing软件测试网P/t9x1P+Z [3R
 EMMA 能和 Makefile 和 Ant 集成,便于应用于大型项目。特别还须指出的一点是,EMMA 的效率很高,这对于大型项目来说很重要。51Testing软件测试网(~Z j4UN$p x7C
51Testing软件测试网)a2I q S{-iz%LSz-V\2O
三、 为什么用EMMA51Testing软件测试网/rS GFu6j
 EMMA 是一个开源、面向 Java 程序测试覆盖率收集和报告工具。51Testing软件测试网{ U Fh_Mh
 它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示。
6g&ca&T N\0 EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码带来“脏代码”,还确保 EMMA 摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试成为了可能。51Testing软件测试网 \mC+HS#B0lN

p:KNG/H xe2Ss0四、 可以怎么用EMMA51Testing软件测试网3X*LY[G|p'K)H
51Testing软件测试网X?i&aXN#g
 On-the-fly 模式
U)HU&v1uqxek f0 Offline 模式51Testing软件测试网%Z@d`5WYUJ]
使用emma基本步骤
&C UYW'I01、插装字节码到想要测试覆盖率的文件-> 生成coverage.em 文件
8m"n;g6S$W XD0插装操作可以面向 JAR 包、 WAR 包、 WAR 包、类文件和目录
)[K4p U9tT3d02、按正常的工作流程启动服务器,测试程序。
&}R!B.X Nt {:Osx03、收集覆盖率信息->生成coverage.ec文件
#C\ @$p{~7iQ6L0可以在本机收集,也可以从远程机器收集51Testing软件测试网4ST;QkS5}
4、生成覆盖率报告->通过coverage.em 和 coverage.ec文件
4GT,xsX5sd}0
d(HE"FMaWy N0五、 看一个例子51Testing软件测试网"w v3?!}L.{}t"?^
51Testing软件测试网F9Y U ~,l'Zd X
(一) (准备环境)51Testing软件测试网?*p"vag
51Testing软件测试网Z!r4hE*Q"^ y7iM@
 下载EMMA 目前最新开发版本[emma-stable-2.1.5320-lib.zip 2005-06-22 463.2 KB]
&bh:y!a t7hD}0http://sourceforge.net/projects/emma/files/emma-testing/2.1.5320/
/Q"\+t Z H,?"Ha0注意:当前的release版本并不支持  主动收集覆盖率信息  的功能;
!b7L3gqa&n0 下载的文件 emma-stable-2.1.5320-lib.zip
7j5Ft$WeJ~K']:iGs0emma.jar    (EMMA 核心功能模块的实现和 EMMA 运行时所需的类文件)51Testing软件测试网~7ZFH0w'd,@)l,uO2|
emma_ant.jar     (emma与ant 结合使用的辅助包)
7D)Je0? `J$f2|5OE0 把emma.jar 设置到 classpath中,或者扩展到Java 虚拟机中(即将 emma.jar 放到被测组件运行使用的JRE 目录下)
m4nX2}w6[5ya051Testing软件测试网 j?pBCnZa8VN(s

(|1O2I%I*g$pir0(二) (插装)
N p;\ @(gK4v ^6Ogf0
^u9^+s(r6R0 EMMA 中提供了 “instr” 命令完成插装操作
2\,F PnE01、插装目录和类文件
8Y7J/p/pBq I0对于类文件,通过指定类文件所在的目录实现
(`Y$T4A"[/T$aI0java emma instr -m overwrite –ip [文件路径或class文件] -Dmetadata.out.file=[文件路径和文件名] .em
b(KMI`$~-}0java emma instr -m overwrite –ip  classes -Dmetadata.out.file=c:\coverage.em51Testing软件测试网A|,D)@*k]*e

-q/^7sT#}2xX02、插装 JAR
9U q oU4CgC`ql0JAR 包可以作为一个整体进行插装。通过对整个 JAR 进行插装,可以避免对 JAR 包进行解压和压缩的过程,提高插装效率。
m*Wb%r L-q1Eg U0java emma instr -m overwrite –cp   [文件路径和文件名].jar  Dmetadata.out.file=[文件路径和文件名].em51Testing软件测试网JbC6f(f)F;u
java emma instr -m overwrite -ip  lib\lib1.jar;lib\lib2.jar -Dmetadata.out.file=c:\coverage.em
x-D N s,I ~:CC03、插装 WAR/EAR 包
'O!x*hR4Q0由于 WAR/EAR 包需要运行在特定的环境中,所以在进行插装之前,需要先将其安装在特定的 J2EE 容器中,然后将其看作目录进行插装。51Testing软件测试网x|Vk;k
java emma instr -m overwrite \ -ip [文件路径和文件名].war -Dmetadata.out.file=[文件路径和文件名].em
8\[ U+SGS0java emma instr -m overwrite \ -ip  test.war -Dmetadata.out.file=c:\coverage.em51Testing软件测试网 M])nh5P"{'z i

-P1Cm#lX2@q%J04、选择性的插装51Testing软件测试网9cUVP7Sf}5F
EMMA 支持对整个 JAR 包和目录进行插装,但如果在 JAR 包或者目录中包含系统的文件或者测试过程中不关心的文件时,应该进行选择性插装,因为这些文件的存在会影响测试结果的百分比。 EMMA 提供了选择插装的选项,实现选择性插装。51Testing软件测试网?&lh? l;v*\+Y
java emma instr -m overwrite -cp test.jar -ix +com.test.* -Dmetadata.out.file=[文件路径和文件名].em51Testing软件测试网 i*q?VS/qB4|
java emma instr -m overwrite -cp test.jar -ix +com.test.* -Dmetadata.out.file=c:\coverage.em 
0RX%x0j M GZK051Testing软件测试网V#hHPu&to3Gq$Og
 参数 “m”代表插装后文件输出的模式。有三个值可供选择: “copy” ,“overwrite” 和 “fullcopy” 。其中,“copy” 和 “ fullcopy” 这两种模式将会改变插装文件所在的目录,并需要测试人员手动为其生成所需的包,使用起来比较复杂。“overwrite” 模式直接用插装后的文件覆盖插装前文件,使用方便。但是由于同一时间生成的文件只能插装一次,在 “overwrite”模式下,插装前的文件已经丢失,测试人员无法重复插装操作,因此建议在插装之前先将需要插装的文件和包进行备份。51Testing软件测试网,p^#T5TI v
 参数 “ip” 和 “cp” 用来提供插装路径,其中 “cp” 用来指明一个文件夹, “ip” 指定单独的文件或者 JAR 包。
y9A0Wzs0 参数 “Dmetadata.out.file” 用来指定插装得到的元数据文件保存的路径。
8L/s$J.B3K4cG0 EMMA 中通过 “ix” 参数指定文件的包含和排除关系,其中在 “+” 符号后的文件为包含进的文件, “-” 后面的内容为排除在外的文件。51Testing软件测试网1d X6~*h0k B/R5yH
__________________________________________________
Pq z!T\b4F0这个不能用
c3K,u{b)x,l+}J0import com.wyim.msg.csim_admin.thrift.CsimAdminService;51Testing软件测试网i6N3tq%B%n(O
51Testing软件测试网rjQG8M _W9KQ3K%F
__________________________________________________
D A0wnd9CS/K$at0
Z]7@|an0ez;]0(三) (合并元数据)
'hOJ2x*WGPo'{&c0 完成插装操作以后,在指定的路径下会产生一些名为 “*coverage.em” 的文件,这些文件保存了插装的元信息,这些信息主要是记录插装过程中的插装点在被测代码中的位置。如果在插装过程中,指定这些文件到同一文件的话, EMMA 默认将元数据进行合并。如果测试人员未指定路径,或者希望得到独立的元文件,这些文件将分别产生在默认或指定的目录下。测试人员还可以通过使用 “merge” 命令手动将这些元文件进行合并,保证生成的覆盖率报表的全面性。注意:合并操作不支持逆向操作。
C;\,s^LkR [G6e051Testing软件测试网4t|A;x?kGj
 合并元数据命令51Testing软件测试网;|n+X:n%u-P2e WA @Z
Java  emma  merge -input <path1>/coverage1.em,<path2>/coverage.em -out <path>/coverage2.em51Testing软件测试网+E#Q0we"[5fme
Java  emma  merge -input  c:/coverage1.em,c:/coverage2.em -out c:/coverage.em51Testing软件测试网x5ciR7[ P+jl+D"A
在 “input” 后面的参数为待合并的文件名,在 “out” 后面的参数为合并以后的结果文件。51Testing软件测试网}&n }V(F

7g+vEHh7r C0(四) (运行测试用例
+UV,s5G}qU!j \0
8}eb8`([g5iR0 完成插装工作以后,测试人员可以按照测试计划运行测试用例。51Testing软件测试网#Y#SZ7P u
 EMMA 将在测试执行的过程中记录代码执行信息并将结果记录在内存中。51Testing软件测试网(TP0T7V2].{Kh+z3g4k2I
 每次当 JVM 停止时,内存中记录的执行信息将被清除并被保存到 “*.ec” 的文件中。51Testing软件测试网fE$N.q`:l
 实际测试的过程中, JVM 的停止很难控制,因此测试人员可以定时手动将内存中执行信息写出。在这种情况下,内存中的记录被输出,但是内存中的内容不被清除。
3NN&C H4@%q!Q/r051Testing软件测试网 M[r%o0e(]
(五) (收集覆盖率信息)51Testing软件测试网+w|;e:a1g2G7i6Hq
 从远程机器上收集覆盖率信息
elo?"sj:V grq0java  emma  ctl  –connect ip:47653 -command coverage.dump,[文件路径]/coverage.ec51Testing软件测试网b9Dr5J6MpJT
java  emma  ctl  –connect 192.168.61.123:47653 -command coverage.dump, c:/coverage.ec
/Xv7u z)eE4J)Z0 从本地收集覆盖率信息51Testing软件测试网aP#]7zOVp o9[8dh
java emma ctl –connect [本机IP]:47653 -command coverage.get,[文件路径]/coverage.ec
1VW#E%kR0java emma ctl -connect localhost:47653 -command coverage.get,c:\emma\coverage.ec   
c Uy4@"S U1u0
l/Lb)H|O_.{0注:收集信息时服务一定是开启状态,否则会报错:
9[;B2aL)`9Em#M D Ze0emma ctl: coverage.get: RPC failure while executing [coverage.get]
4bP)om7t0(六) (生成覆盖率报告)
SH{e$~/E5E,En2ql0 测试报告可以以 HTML ,文本和 XML 三种格式输出51Testing软件测试网6s{.wCOG9D`-H~
 java -cp emma.jar emma report -r txt,html,xml -in [文件路径和文件名].em, [文件路径和文件名].ec - Dreport.html.out.file=[报表路径和报表名].html -Dreport.metrics=class:[合格率](,method:[合格率])
l4_|4L:DEV-]\ k0java  emma report -r html -in c:/coverage.em,c:/coverage.ec - Dreport.html.out.file=c:/emma/coverage.html -Dreport.metrics=class:80,method:75
'c'Lh.a0diLM0如下会在当面目录下生成报表文件51Testing软件测试网Q@:eyjs|D SoL
java emma report -r txt,html -in coverage.em -in coverage.ec 51Testing软件测试网$q%`,_ K k
 可以根据测试要求通过 “Dreport.metrics” 参数设定满意的覆盖率标准。在示例命令中设定了类覆盖率的满意度为80%。
k&hor"Fboi t/b0 红颜色代表该覆盖率未达到满意的覆盖率标准
h0s+a AH.Nd051Testing软件测试网/YFq.Ov%O OJ
六、 ECLIPSE安装EMMA插件51Testing软件测试网,X*Bc%~Fs(K

,k|"~W~s5gV/h9o;Z0Help→Software updates→Find and Install...→Search for new features to install→next→New Remote Site...
0Ojq;~ lf(c051Testing软件测试网/i4{UByx0zNr
name:eclemma
6@KouS/w'\W6u(h0URL:http://update.eclemma.org/51Testing软件测试网7~S~8f)N*z

8Q:Dq"C(@yk5p051Testing软件测试网9M&a-v~.|rYv;F

%_K3Q B^9fn-] M0参考资料
3Gc9i0Y0bM$c051Testing软件测试网Jv:L+C-I{
 http://emma.sourceforge.net/51Testing软件测试网a t Jo T,g^0s
 http://www.ibm.com/developerworks/cn/opensource/os-cn-emma/index.html#download 

TAG: 覆盖率

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar