因为工作原因,想对写的代码进行一下测试覆盖率的统计,在网上看到不少工具,一开始用的是Cobertura,觉得它的报告比较直观,但是后来发现要用到大量的ant脚本,嘿嘿,因为本人对ant不熟,觉得这个入手太慢了,就换成了emma。
我的探索
一开始发现有个东东叫做EclEmma,是emma的eclipse插件,顿时感觉前途一片光明,下班以前就可以解决问题。结果用eclipse自带的工具安装以后,发现可能是EclEmma版本太高的原因,coverage视图不能显示。郁闷,只好下了一个低版本了,现在的搭配是myeclipse6.6(自带eclipse3.3.2)+ EclEmma1.5.3。
装上插件之后,测试junit的时候还遇到一个问题,就是使用junit测试时能够正常运行,使用EclEmma运行junit时报告缺少类文件,上网一通搜,发现是缺少oraclepki.jar包,网上也没找到下载地址,最后发现在Oracle的安装目录下就有,目录为oracle\product\11.2.0\dbhome_1\jlib。感觉挺奇怪,因为在正常编译工程时是不需要这个jar包的。
EclEmma只能用于测试junit程序或是单机版的。找了半天也木有找到怎么统计web工程发布后人工测试的覆盖率。其实使用junit完全可以满足我们项目对关键算法的验证,但是一个是我太懒啦,用例要求的输入项又太多,所以只好继续寻找。
最后还是回到了Emma上。emma的命令行命令虽然不多,但也够用了。一开始下载的release版本2.0.5312,结果没有 ctl 命令,最后还是换到2.1.5320版本,下载地址http://sourceforge.net/projects/emma/files/emma-testing/
操作过程
1、将下载zip包中的emma.jar文件复制到使用到的jre目录下的ext文件夹下。
2、使用命令:
[plain] view plaincopyprint?
java emma instr -m overwrite -ip [classes目录]
java emma instr -m overwrite -ip [classes目录]得到coverage.em文件
3、使用tomcat启动web工程,测试
4、不要关闭tomcat,使用命令:
[plain] view plaincopyprint?
java emma ctl -connect localhost:47653 -command coverage.get,D:\test\coverage.ec
java emma ctl -connect localhost:47653 -command coverage.get,D:\test\coverage.ec得到coverage.ec文件
5、使用coverage.em、coverage.ec两个文件获取报告。使用命令
[plain] view plaincopyprint?
java emma report -r html -sp . -in coverage.em,coverage.ec
java emma report -r html -sp . -in coverage.em,coverage.ec
得到覆盖率报告。
使用emma时遇到几个问题
1、没法直接操作war包,如果对war包进行instr,提示说处理了0个文件,所以只好把war包解压以后再处理
2、在windows下tomcat不能自动得到coverage.ec文件,需要使用命令手动获取。
开发环境:
操作系统:window7 64bit
tomat:apache-tomcat-7.0.25 64bit
jdk:1.6.30
myeclipse:6.6
EclEmma:1.5.3
Emma:2.1.5320