2017拉

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

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

 一、 出了什么问题?51Testing软件测试网5s+DtJ;_j,Iq r%{/^
 对于测试人员 测试完一个项目后,如何确保所有的功能都被测试到?51Testing软件测试网rR x!Mw4F'~"Tu
 对于开发人员 辛辛苦苦写的代码如何知道有没有运行过?
g3Jn?gz[0 代码优化从何处开始?
#OL2B-H)k3R*CCZ:Z0
XrGT%?^2a Px D0二、 EMMA是什么?
C%`*A}r}3g0 EMMA 是一个用于检测和报告 JAVA 代码覆盖率的开源工具。51Testing软件测试网SR8QY;LBm^~u
 它不但能很好的用于小型项目,很方便得得出覆盖率报告,而且适用于大型企业级别的项目。
!m4RO}E t'T2g0 EMMA 有许多优点,首先你能免费得到它,并把它用于自己项目的开发。51Testing软件测试网Q+HX,\eC:p'|Z
 它支持许多种级别的覆盖率指标:包,类,方法,语句块(basic block)和行,特别是它能测出某一行是否只是被部分覆盖,如条件语句短路的情况。51Testing软件测试网gy4i}-hS
 它能生成 text,xml,html 等形式的报告,以满足不同的需求,其 html 报告提供下钻功能,我们能够从 package 开始一步步链接到我们所关注的某个方法。51Testing软件测试网0| ZAdx n$a
 EMMA 能和 Makefile 和 Ant 集成,便于应用于大型项目。特别还须指出的一点是,EMMA 的效率很高,这对于大型项目来说很重要。51Testing软件测试网 n!a Y)sGu"xHL5yV

B kDuzc0三、 为什么用EMMA51Testing软件测试网-I1\ \#F}u.O
 EMMA 是一个开源、面向 Java 程序测试覆盖率收集和报告工具。51Testing软件测试网W)Z-|:{6` M;_
 它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示。
j4o4lIg0N(a;y/I3b0 EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码带来“脏代码”,还确保 EMMA 摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试成为了可能。
Z#|h#]!L)e051Testing软件测试网)rdv_}"d n"i \_q
四、 可以怎么用EMMA51Testing软件测试网@;_ph!@
51Testing软件测试网xz,H,^$A
 On-the-fly 模式51Testing软件测试网4^AMA~
 Offline 模式
_?S6S-pj1d0使用emma基本步骤51Testing软件测试网(lo_.L4s*^
1、插装字节码到想要测试覆盖率的文件-> 生成coverage.em 文件
ftV0hu0插装操作可以面向 JAR 包、 WAR 包、 WAR 包、类文件和目录51Testing软件测试网D/Hz+P4}ay
2、按正常的工作流程启动服务器,测试程序。51Testing软件测试网9M"|Mi)Q
3、收集覆盖率信息->生成coverage.ec文件51Testing软件测试网B#`&b@;\
可以在本机收集,也可以从远程机器收集
w W0e||!B04、生成覆盖率报告->通过coverage.em 和 coverage.ec文件
H:]+}@y7{0
'oe `9C FP0五、 看一个例子
@G!^a;}n Yn7O051Testing软件测试网 i.Uwa_#Ww7N#C,~%Za
(一) (准备环境)
+f x#K/q$yN051Testing软件测试网)q,b,e'z e_&r0_
 下载EMMA 目前最新开发版本[emma-stable-2.1.5320-lib.zip 2005-06-22 463.2 KB]
e!O.v/sxF{ Q0http://sourceforge.net/projects/emma/files/emma-testing/2.1.5320/51Testing软件测试网u6vgh!yo
注意:当前的release版本并不支持  主动收集覆盖率信息  的功能;
IP~d#u:{0 下载的文件 emma-stable-2.1.5320-lib.zip
z D$W$J"X m3qc0emma.jar    (EMMA 核心功能模块的实现和 EMMA 运行时所需的类文件)
6@ K"v{!ddPU0emma_ant.jar     (emma与ant 结合使用的辅助包)51Testing软件测试网H hcvn| Y.Q#A
 把emma.jar 设置到 classpath中,或者扩展到Java 虚拟机中(即将 emma.jar 放到被测组件运行使用的JRE 目录下)51Testing软件测试网oM&?\v
51Testing软件测试网x{cCx+X#YX
51Testing软件测试网2e\H oi7O
(二) (插装)51Testing软件测试网6?[rc%X{
51Testing软件测试网3K%q+nnK {}
 EMMA 中提供了 “instr” 命令完成插装操作51Testing软件测试网Theif#jf
1、插装目录和类文件
nvYm.F.r1J0对于类文件,通过指定类文件所在的目录实现51Testing软件测试网0{XF*kRW\ t:l-v
java emma instr -m overwrite –ip [文件路径或class文件] -Dmetadata.out.file=[文件路径和文件名] .em
aR-_F!Y T}*\~Vb-i0java emma instr -m overwrite –ip  classes -Dmetadata.out.file=c:\coverage.em
Ch0v"T C?W051Testing软件测试网{ bQa(xk
2、插装 JAR
0c7|$Y ^2W bXo0JAR 包可以作为一个整体进行插装。通过对整个 JAR 进行插装,可以避免对 JAR 包进行解压和压缩的过程,提高插装效率。
i,M/t)dav9?4oD0java emma instr -m overwrite –cp   [文件路径和文件名].jar  Dmetadata.out.file=[文件路径和文件名].em51Testing软件测试网)V3xd'i8lyK9KcU:j
java emma instr -m overwrite -ip  lib\lib1.jar;lib\lib2.jar -Dmetadata.out.file=c:\coverage.em
6PqM$ADJ.x0Z03、插装 WAR/EAR 包
A:|G9R/K,a?5M0由于 WAR/EAR 包需要运行在特定的环境中,所以在进行插装之前,需要先将其安装在特定的 J2EE 容器中,然后将其看作目录进行插装。51Testing软件测试网xb}b$dB2g*D
java emma instr -m overwrite \ -ip [文件路径和文件名].war -Dmetadata.out.file=[文件路径和文件名].em51Testing软件测试网MESg9tG3l
java emma instr -m overwrite \ -ip  test.war -Dmetadata.out.file=c:\coverage.em51Testing软件测试网3G8r P9pd8{Ia

0h1CZAw'lX |]04、选择性的插装
1U2GXm9q'Rz1S0t0EMMA 支持对整个 JAR 包和目录进行插装,但如果在 JAR 包或者目录中包含系统的文件或者测试过程中不关心的文件时,应该进行选择性插装,因为这些文件的存在会影响测试结果的百分比。 EMMA 提供了选择插装的选项,实现选择性插装。
#A&I0],O.XtT0java emma instr -m overwrite -cp test.jar -ix +com.test.* -Dmetadata.out.file=[文件路径和文件名].em
q)C/~Z&Gdi8\0java emma instr -m overwrite -cp test.jar -ix +com.test.* -Dmetadata.out.file=c:\coverage.em 
[&GC$Kc$V.B N*UO!b"P0
6qu8Lf_m0 参数 “m”代表插装后文件输出的模式。有三个值可供选择: “copy” ,“overwrite” 和 “fullcopy” 。其中,“copy” 和 “ fullcopy” 这两种模式将会改变插装文件所在的目录,并需要测试人员手动为其生成所需的包,使用起来比较复杂。“overwrite” 模式直接用插装后的文件覆盖插装前文件,使用方便。但是由于同一时间生成的文件只能插装一次,在 “overwrite”模式下,插装前的文件已经丢失,测试人员无法重复插装操作,因此建议在插装之前先将需要插装的文件和包进行备份。51Testing软件测试网j;|W+`&U+Ls
 参数 “ip” 和 “cp” 用来提供插装路径,其中 “cp” 用来指明一个文件夹, “ip” 指定单独的文件或者 JAR 包。51Testing软件测试网$[$b?&sy-@*C*g P u
 参数 “Dmetadata.out.file” 用来指定插装得到的元数据文件保存的路径。51Testing软件测试网*p-i({f-D:}
 EMMA 中通过 “ix” 参数指定文件的包含和排除关系,其中在 “+” 符号后的文件为包含进的文件, “-” 后面的内容为排除在外的文件。
P)LK3n |7r2cv\Z0__________________________________________________51Testing软件测试网-y;lbx[,Ht'p&Fm
这个不能用
mk?!N%P,zb0import com.wyim.msg.csim_admin.thrift.CsimAdminService;51Testing软件测试网]CBk'yT
51Testing软件测试网B2S };t&Hk
__________________________________________________51Testing软件测试网 FQ+x;S0g@
51Testing软件测试网-z(c$Ez7o%IfS
(三) (合并元数据)
J D(n`W+\7i0 完成插装操作以后,在指定的路径下会产生一些名为 “*coverage.em” 的文件,这些文件保存了插装的元信息,这些信息主要是记录插装过程中的插装点在被测代码中的位置。如果在插装过程中,指定这些文件到同一文件的话, EMMA 默认将元数据进行合并。如果测试人员未指定路径,或者希望得到独立的元文件,这些文件将分别产生在默认或指定的目录下。测试人员还可以通过使用 “merge” 命令手动将这些元文件进行合并,保证生成的覆盖率报表的全面性。注意:合并操作不支持逆向操作。51Testing软件测试网,jKy9gJ6]6W+A9z~Y

~4ZKq t1q7T0n1o6me0 合并元数据命令51Testing软件测试网]_H o\
Java  emma  merge -input <path1>/coverage1.em,<path2>/coverage.em -out <path>/coverage2.em
` cH+DG/\%B0Java  emma  merge -input  c:/coverage1.em,c:/coverage2.em -out c:/coverage.em51Testing软件测试网N i K9Z:d&`'W
在 “input” 后面的参数为待合并的文件名,在 “out” 后面的参数为合并以后的结果文件。51Testing软件测试网xH(V*[&xcG"b
51Testing软件测试网$j#ri&j)o6]+g%k$`
(四) (运行测试用例
8r.U&hh1A Dxx-qd051Testing软件测试网QU:p0[ @!_1v
 完成插装工作以后,测试人员可以按照测试计划运行测试用例。
etsXJ1I#@!b\.{0 EMMA 将在测试执行的过程中记录代码执行信息并将结果记录在内存中。51Testing软件测试网h[:w/D3S\
 每次当 JVM 停止时,内存中记录的执行信息将被清除并被保存到 “*.ec” 的文件中。51Testing软件测试网.\ |AL~vt&q E?rw
 实际测试的过程中, JVM 的停止很难控制,因此测试人员可以定时手动将内存中执行信息写出。在这种情况下,内存中的记录被输出,但是内存中的内容不被清除。
2b ^ A_1iK|0
'UH|#Y5Ui0(五) (收集覆盖率信息)51Testing软件测试网8b6d5` nZu
 从远程机器上收集覆盖率信息
eY1W1gZ)v0java  emma  ctl  –connect ip:47653 -command coverage.dump,[文件路径]/coverage.ec
6F@'J$E+?x2C0java  emma  ctl  –connect 192.168.61.123:47653 -command coverage.dump, c:/coverage.ec51Testing软件测试网t,c[s+H [qr
 从本地收集覆盖率信息
2z)C-THDX0java emma ctl –connect [本机IP]:47653 -command coverage.get,[文件路径]/coverage.ec
7\r"y6~"B`0xC5qH0java emma ctl -connect localhost:47653 -command coverage.get,c:\emma\coverage.ec   
%U8|$Ym*o6Y1s051Testing软件测试网P3w)h \4WH gU z
注:收集信息时服务一定是开启状态,否则会报错:51Testing软件测试网 N.?8mSxs1o
emma ctl: coverage.get: RPC failure while executing [coverage.get]51Testing软件测试网$IM3p1m6rPz4H
(六) (生成覆盖率报告)51Testing软件测试网~#R;iB3kK-s
 测试报告可以以 HTML ,文本和 XML 三种格式输出51Testing软件测试网/]k6c{W[
 java -cp emma.jar emma report -r txt,html,xml -in [文件路径和文件名].em, [文件路径和文件名].ec - Dreport.html.out.file=[报表路径和报表名].html -Dreport.metrics=class:[合格率](,method:[合格率])
] T MK'j;f%[ k$s0java  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:T,D,ZmL0如下会在当面目录下生成报表文件51Testing软件测试网3ND+Af H?2OB
java emma report -r txt,html -in coverage.em -in coverage.ec 
-k@-Yu?0 可以根据测试要求通过 “Dreport.metrics” 参数设定满意的覆盖率标准。在示例命令中设定了类覆盖率的满意度为80%。
c+N*X)]3tis5I0 红颜色代表该覆盖率未达到满意的覆盖率标准51Testing软件测试网z*QW,|#kz;u
51Testing软件测试网4K_'CjU"]1|$d GC
六、 ECLIPSE安装EMMA插件
U geYhp0
s~Y'I'v)w/hL z0Help→Software updates→Find and Install...→Search for new features to install→next→New Remote Site...
0^#Sz/Y*C aH D\051Testing软件测试网2g$dis3{,_
name:eclemma51Testing软件测试网)dy)_b5}1|)HO{7S
URL:http://update.eclemma.org/
1{ow%KzQ4a051Testing软件测试网Y D+|gY3Q

}1{+S~-D3Q k1M%^(Pm051Testing软件测试网7}:Fa A E7O
参考资料51Testing软件测试网t5UA6B c$aL};z P
51Testing软件测试网 Ui1l_;HNok(z$?
 http://emma.sourceforge.net/
'U `X)``6l0 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