经常有些
Java项目需要Java自动化case(集成case)来做功能回归,但是自动化case的
覆盖率如何保证呢?最近主管介绍了
Sonar这个工具,很好用。
51Testing软件测试网@J1a'}z
使用方法
使用后自动化case的覆盖率从65%提高到85%,遇到开发代码重构或者优化的事情再也不怕了。使用方法很简单,根据sonar的统计报告,可以看到哪些代码没有被覆盖到,有针对性地补充对应的case就可以了。
51Testing软件测试网 }P.]5A{'D51Testing软件测试网N@L)z.Y Qg3X(L
4xu)Q+SR0
下面介绍具体的安装部署使用步骤,下面会再写一篇
文章介绍覆盖率报告。
------------------------
------------------------
sonar是一个管理代码质量的开放式平台。详细的部署安装sonar文档请参考官方文档:http://docs.codehaus.org/display/SONAR/Installation+and+Upgrade
这里列出本次使用所涉及的步骤。
1.下载sonar-xx.zip
wget http://dist.sonar.codehaus.org/sonar-3.4.1.zip
下载页面详情 http://www.dodownload.com/software-development/ide/sonar2.html
51Testing软件测试网.fYzO f
2. 解压sonar-xx.zip文件。
unzip sonar-3.4.1.zip
51Testing软件测试网 ?T8M(t
tv
L8I
3. 启动sonar(简单到难以置信)
cd sonar-3.4.1
./bin/linux-x86-64/sonar.sh start
51Testing软件测试网0_^$_9OX(DLqR
4. 查看sonar是否启动成功:
sonarip=xx.xx.xx.xx
假设部署在http://sonarip/上面,访问http://sonarip:9000/能够出来sonar的管理界面就表示启动ok了。
备注:
1.如果在启动sonar中遇到问题,就使用sonar.sh console来启动,看看是哪里报错的,我在启动过程中遇到这台机器的/tmp目录居然不能够write。^^
2.默认的登录账号和密码都是admin
ts7j1L4{0
U
f(h/I:~!P@ZU'M0
----------------------
客户端:使用jacoco来生成覆盖率的文件、报告
----------------------
1.使用jacoco来生成覆盖率的文件:jacoco.exec
1. 获取到下载到的jacocoagent.jar
存放目录: /home/a/jacocoagent.jar
wv@,V*pCQ6{.c$p0
51Testing软件测试网zF Sc@8\3mT3I!f
2. 要修改服务器配置---带上-javaagent选项。
【简单理解:javaagent类似于拦截器,在执行java的main方法之前,它会先执行javaagent里面的实现的premain方法】
修改java容器(jboss或者tomcat)启动jvm的选项:
* jboss:在文件/home/a/jboss-4.2.2.GA/bin/run.conf的最后添加下面的一行:
JAVA_OPTS="$JAVA_OPTS -javaagent:/home/a/jacocoagent.jar=destfile=/home/a/project/download/jacoco.exec"
* tomcat:在目录下面/opt/taobao/tomcat/bin新建一个文件setenv.sh文件,内容如下:
export CATALINA_OPTS="-javaagent:/home/a/jacocoagent.jar=destfile=/home/a/project/download/jacoco.exec"
3.编译部署被测代码,启动服务器
最终查看ps -ef | grep java的时候,能够看到-javaagent选项。
d.q,ZzG0
n }a1Fq"j LL[(c0
它会生成覆盖率文件jacoco.exec,生成文件的路径就是在步骤#2中-javaagent中指定的(/home/a/project/output/jacoco.exec)。
51Testing软件测试网5UaD^CQ s jn
51Testing软件测试网$@j7x1G6TbM
5. 停止jboss/tomcat服务。
一定要停止jboss/tomcat服务,注意使用kill <pid>,不能使用kill -9 <pid>来杀死java进程,
原因是jacoco是在jboss/tomcat停止的时候,挂钩子来生成jacoco.exec文件的。kill -9是强制杀死进程,没法产生jacoco.exec文件的
#P6x,ua&^a
|;RPTZ0
6. 查看jacoco.exec文件是否已经生成以及更新时间是否为当前时间
ll /home/a/project/download/jacoco.exec
51Testing软件测试网.S.I&g`F
51Testing软件测试网"Ky&JNf5BfHv
2.使用sonar来生成覆盖率的报告---处理jacoco.exec
1. 获取到被测工程的一份源代码,一般是从svn中check out出来。
|M PY [(j]*r
Z0
vSaV:Q7Lq{&t0
2. 修改它的pom.xml文件,增加sonar插件
在pom.xml中的<build><plugins>....</plugins></build>中增加下面几行:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.0</version>
</plugin>
注意,该插件必须要求mvn3.0以上版本
51Testing软件测试网)@(i4Y!x/w(dKa6I
3. 执行下面的命令来生成报告:
sudo mvn clean install -Ptest sonar:sonar -Dmaven.test.failure.ignore=true -Dsonar.jdbc.url=jdbc:h2:tcp://sonarip:9092/sonar -Dsonar.host.url=http://sonarip:9000 -Dsonar.jacoco.itReportPath="/home/a/project/download/jacoco.exec" -Dsonar.dynamicAnalysis
QzT.sp)_LpV9Cp0
其中,
* sonar.jacoco.itReportPath:jacoco生成的覆盖率数据文件。
* sonar.jdbc.url:sonar使用的
数据库链接地址(上文“安装sonar”中sonar被部署到的机器),如果sonar服务也是安装在这台机器上面,就可以省略。(默认值:jdbc:h2:tcp://localhost:9092/sonar)
* sonar.host.url:sonar服务的地址,同sonar.jdbc.url,如果sonar服务也是安装在这台机器上面,就可以省略。(默认值:http://localhost:9000)
51Testing软件测试网}9}!E'h)x%j4T
4. So,如果一切顺利的话,你访问http://sonarip:9000,就能够看到集成测试的覆盖率数据了。Enjoy!
【如果在Dashboards上面找不到Integration tests coverage这个widget,可以在Dashboards上面添加的】
'Gjn5U
KQ/gM0
"i2YW6zIM0
参考文档:
http://www.sonarsource.org/measure-code-coverage-by-integration-tests-with-sonar/
http://www.sonarsource.org/measure-coverage-by-integration-tests-with-sonar-updated/
http://docs.codehaus.org/display/SONAR/User+Guide
https://mifosforge.jira.com/wiki/display/MIFOS/How+to+get+setup+sonar+coverage+report+for+integration+tests
http://www.eclemma.org/jacoco/ (需要翻墙)
#ew\
j S!c~6h0