使用emma收集webapp运行期代码覆盖率

开始前崇拜一下emma作者,这么牛的项目都不继续下去,文档也写的如此难懂.


好,开始正文:
1.修改测试机jboss项目打包脚本
#!/bin/sh
BASE_HOME=/home/admin/work
SRC_HOME=$BASE_HOME/top
TARGET_HOME=$BASE_HOME/top/top-webapp/target
COPY_HOME=/home/admin/top/target
LIB_HOME=/home/admin/top/lib
LOG_HOME=/home/admin/top/logs
PATH=/opt/taobao/mvn1/bin:$PATH
JAVA_HOME=/opt/taobao/java1
export PATH
export JAVA_HOME
cd $SRC_HOME
svn up
mvn clean package -U  -Dmaven.test.skip=true -DfailIfNoTests=false

rm -rf $COPY_HOME/*
cp -r  $TARGET_HOME/top $COPY_HOME/top.war
cd $LOG_HOME/
for i in `ls  $COPY_HOME/top.war/WEB-INF/lib/top-*.jar`
        do $JAVA_HOME/bin/java -cp $LIB_HOME/emma.jar emma instr -m overwrite -cp $i 
done
cp $LIB_HOME/emma.jar $COPY_HOME/top.war/WEB-INF/lib/

cd $COPY_HOME/
tar zcf top.tgz top.war
cd $HOME/top/bin

echo "Now stoping JBoss................."

killall -9 java

sleep 5

echo "Now starting JBoss................."

./jbossctl restart

注意这段
for i in `ls  $COPY_HOME/top.war/WEB-INF/lib/top-*.jar`
        do $JAVA_HOME/bin/java -cp $LIB_HOME/emma.jar emma instr -m overwrite -cp $i 
done
cp $LIB_HOME/emma.jar $COPY_HOME/top.war/WEB-INF/lib/

ps:
这时会在$LOG_HOME下生成一个coverage.em文件, 你可以拷贝回本地分析用,或者本地也用类似脚本生成该文件.
emma.jar必须是2.1,最新的是2.1.5320,否则没有后面的远程获取覆盖率数据的tcl命令

2.远程下载覆盖率文件
D:\alin>java -cp emma.jar emma ctl -connect 192.168.207.107:47653 -command cover
age.get,coverage.ec

D:\alin>java -cp emma.jar emma report -r html -in coverage.em,coverage.ec -sourcepath d:\workspace\top

ps:
这里代码库直接指定工程目录,但是emma可能无法识别目录内子项目内的源代码
本地的coverage.em必须和服务器上的执行代码保持一致

3.打开生成的coverage/index.html,即可查看运行期的覆盖率报表

就这么简单,不过要想实现自动收集并展示运行期覆盖率,还有一些工作要做

猜你喜欢

转载自alin-ass.iteye.com/blog/664127