已转开发,博客新地址:http://welcomezhang.iteye.com/

安装部署Sonar+jacoco,生成case覆盖率统计报告

上一篇 / 下一篇  2013-06-26 13:31:35 / 天气: 阴雨 / 心情: 平静 / 精华(1) / 置顶(2) / 个人分类:Java

经常有些Java项目需要Java自动化case(集成case)来做功能回归,但是自动化case的覆盖率如何保证呢?最近主管介绍了Sonar这个工具,很好用。

:ws'eU[d0M0
使用方法
使用后自动化case的覆盖率从65%提高到85%,遇到开发代码重构或者优化的事情再也不怕了。使用方法很简单,根据sonar的统计报告,可以看到哪些代码没有被覆盖到,有针对性地补充对应的case就可以了。
/AU\.bth&p.UN&~ u0

^^f-y*Iu*enWTX0

Z.afZ7a r)N `0
下面介绍具体的安装部署使用步骤,下面会再写一篇文章介绍覆盖率报告。
------------------------
服务端:安装sonar server
------------------------
     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

` U"A){h$]-S9q g4l0
2. 解压sonar-xx.zip文件。
    unzip sonar-3.4.1.zip
51Testing软件测试网^ F mmQ,v O
3. 启动sonar(简单到难以置信)
     cd sonar-3.4.1
     ./bin/linux-x86-64/sonar.sh start
51Testing软件测试网6N!_m A7EC1_"E_1R
4. 查看sonar是否启动成功:
sonarip=xx.xx.xx.xx
假设部署在http://sonarip/上面,访问http://sonarip:9000/能够出来sonar的管理界面就表示启动ok了。
     
备注:
1.如果在启动sonar中遇到问题,就使用sonar.sh console来启动,看看是哪里报错的,我在启动过程中遇到这台机器的/tmp目录居然不能够write。^^
2.默认的登录账号和密码都是admin

!l TZ-\*L4E;H$L0

h.A y;t0vPh g'BS0
----------------------
客户端:使用jacoco来生成覆盖率的文件、报告
----------------------
1.使用jacoco来生成覆盖率的文件:jacoco.exec
1. 获取到下载到的jacocoagent.jar
存放目录: /home/a/jacocoagent.jar
51Testing软件测试网*@:p.c#@o ? rq!U a8U
51Testing软件测试网i ~.Q+ChP9N
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选项。

[T:L!jU!]1Ou0

p.mN\_t_(|^_0
4. 执行黑盒/集成/自动化测试
它会生成覆盖率文件jacoco.exec,生成文件的路径就是在步骤#2中-javaagent中指定的(/home/a/project/output/jacoco.exec)。
51Testing软件测试网&~"Y)[Iu ~C}~
51Testing软件测试网y*LW8?o-?
5. 停止jboss/tomcat服务。
一定要停止jboss/tomcat服务,注意使用kill <pid>,不能使用kill -9 <pid>来杀死java进程,
原因是jacoco是在jboss/tomcat停止的时候,挂钩子来生成jacoco.exec文件的。kill -9是强制杀死进程,没法产生jacoco.exec文件的

q["C`+?*HBp-p0
6. 查看jacoco.exec文件是否已经生成以及更新时间是否为当前时间
ll /home/a/project/download/jacoco.exec

#qJi;|i0

S+?V*T C:{0
2.使用sonar来生成覆盖率的报告---处理jacoco.exec
1. 获取到被测工程的一份源代码,一般是从svn中check out出来。51Testing软件测试网0qY4T(gC5u)i'I
51Testing软件测试网 }$d:H6\;\/ghMz
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软件测试网 aC k-A3VNal
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

5[(y#I:|(er,\#]$Q h1p0
     其中,
          * 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软件测试网1l R lp6On,|F
4. So,如果一切顺利的话,你访问http://sonarip:9000,就能够看到集成测试的覆盖率数据了。Enjoy!
【如果在Dashboards上面找不到Integration tests coverage这个widget,可以在Dashboards上面添加的】
51Testing软件测试网iFmK Svi qS8T&El
51Testing软件测试网-JIP#f#WJ
参考文档:
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/ (需要翻墙)
51Testing软件测试网&_*\B/F:oZ

TAG: java sonar 覆盖率

 

评分:0

我来说两句

Open Toolbar