测试小生 Li_Hugo 微博:http://weibo.com/lz2012bj

自动化部署覆盖率工具

上一篇 / 下一篇  2013-09-30 14:34:30

class文件插桩

beta机器部署
一、将附件中的installcover.tar.gz文件tar开,部署到/home/q目录下。
二、修改installcover用户:sudo chown tomcat:tomcat -R installcover
三、将附件中的(installcover_hprice)installcover_fpsystemManage上传到目录/etc/init.d目录下,并改名为installcover_服务名
        chmod 755 installcover_服务名(服务名为/home/q/www/下面的工程名称)

四、修改文件:installcover_fpsystemManage中的service="fpsystemManage" 为service="服务名"
五、修改/home/q/tomcat/bin/startup.sh 脚本,在启动tomcat前,添加一句命令cd /home/q/installcover/服务名
     (这是工具不够友好的地方,它需要在有可读写权限的目录下启动tomcat,因为需要产生一个临时锁文件。
       这块后续会优化掉)

六、告知job名和installcover_服务名
添加相关服务

目前支持批量部署需要提供如下信息:

机器名   tomcat启动参数(例如:restart_tomcat.sh bnb.xxxx.com ,这列请填写bnb.xxx.

com)   服务脚本名

各列以空格分隔。

环境检查

  

以上部署完毕后,可以从jenkins中看到如上信息

直接build 构建,既可以得到带有插桩的版本。
清空service_name 选项,则可以发布不带有插桩的版本。

检查tomcat的日志
Cobertura: Loaded information on 629 classes.
Cobertura: Saved information on 629 classes.
Cobertura: Loaded information on 629 classes.
Cobertura: Saved information on 629 classes.
看到如下信息,则说明加载正常,
测试吧。

report信息查看

1、进入自动化测试平台:

      在里面添加job: 
2、修改配置项:

一、输入被测版本的branch tag

二、输入机器名
       输入被测版本的branch tag 号 和需要对比版本的 tag号(一般默认是trunk)

三、查看build日志,在日志最后可以看到一个report url,
            如:http://l-code.vy.corp.qunar.com:9001/cobertura/jenkins-cobertura_collect-52/
            点击该url 即可查看整体代码覆盖率的详细信息,
            输入:http://l-code.vy.corp.qunar.com:9001/cobertura/jenkins-cobertura_collect-52/diff/
            即可看到svndiff代码覆盖率的相关信息
            (以上两个范例url ,均可点击,bug和相关样式建议,请mail:zhaowen.cai@qunar.com)

手动部署覆盖率工具

class文件插桩

一、解开附件中的tar包,并放在/home/q目录下
二、将附件中的installcover_hprice中,installcover_服务名中的 engine_Master_Home
修改为engine_Master_Home="前部不修改部分/服务名/"
三、运行该脚本。
四、在/home/q/installcover 启动tomcat的restart命令
五、如上自动化部分的信息检查。

report信息查看

一、调用:sudo sh -x /home/q/installcover/cobertura/cobertura-report.sh --destination /home/zhaowen.cai/test3/ --datafile /home/q/www/installcover/cobertura.ser /home/zhaowen.cai/b-130322-143921-wenhua.cao/src/main/java
--destination:指定html文件report的生成位置
--datafile:指定cobertura.ser文件的位置
--format: 指定生成的report的格式,默认html,可以指定为xml,html ,summaryXml
最后源码位置:/home/zhaowen.cai/b-130322-143921-wenhua.cao/src/main/java
如果不指定源码位置,可以生成汇总报告,但无法看到具体的代码相关覆盖信息。

二、查看report ,推荐一个简单的方法
在--destination指定的目标目录下启动:python -m SimpleHTTPServer

在前端直接输入,http://机器名:8000

自动化环境部署覆盖率工具

class文件插桩 

修改上面飘红部分为:Deploy-发布开发机(并启用覆盖率收集)

report信息查看

在测试用例job中添加如下配置: 
参数说明:

1、$BUILD_TAG为默认参数

2、l-otstest2.h.beta.cn6为机器名

3、“provider user man task api”为服务名列表,中间以空格分隔

report的结果会反馈在log日志中,并且在每天下午发出的自动化报告中有相应的反馈数据。

问题跟进和解决

svndiff代码和覆盖率信息的结合

-----目前已经完成基本功能版本,可以输出相关信息,展示优化进行中。

可运行程序见附件svndiff_2.py

使用步骤

1、安装类库

因beta机器python脚本较低,类库不全,需要安装相关类库。

解压附件中的elementtree-1.2.6-20050316.tar.gz

进入相应目录执行:sudo python setup.py  install

安装完毕

2、获取覆盖率xml

执行:sudo sh -x /home/q/installcover/cobertura/cobertura-report.sh --destination /home/zhaowen.cai/test3/ --datafile /home/q/www/installcover/cobertura.ser --format xml /home/zhaowen.cai/b-130322-143921-wenhua.cao/src/main/java

具体解释见上。

3、执行脚本

python ./svndiff_2.py ./coverage.xml ./codediff ./ ./test/

参数1:覆盖率xml文件

参数2:svn diff 文件(svn diff tagurl1 tagurl2,其中tagurl1为新版本代码)

参数3:源代码读取路径,只需要指定到./b-130322-143921-wenhua.cao/src/main/java ,

             后面以package名形成的目录,程序会自动识别

参数4:报告输出路径。

spring AOP和cobertura插桩冲突

问题:由于cobertura采用的CGLIB的方式进行插桩,但是由于应用可能默认使用的jdk自带的代理进行加载导致spring无法识别被代理proxy,所以需要在应用中强制指定使用cglib。

解决方案:适自己情况任意选择一种方式配置proxy-target-class="true"即可

 <tx:annotation-driven proxy-target-class="true"/>

<aop:aspectj-autoproxy proxy-target-class="true"/> 

<aop:config proxy-target-class="true"/> 

想了解详细信息请移步spring的说明文档

spring文档说明:To be clear: using 'proxy-target-class="true"' on <tx:annotation-driven/><aop:aspectj-autoproxy/> or <aop:config/> elements will force the use of CGLIB proxies for all three of them.

wiki:http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch08s06.html

jar包的覆盖率统计

手工测试部分完成。

部署完可能出现的问题

问题1

 部署了代码覆盖率的机器中的所有tomcat应用都无法启动,而且catalina.out中也没有日志

解决方法:

检查/home/q/tomcat/bin/startup.sh 是不是为空,如果为空,请从其他机器拷贝一个

问题2

部署了代码覆盖率的机器中的所有tomcat应用都无法启动,catalina.out中提示Warning:Faild to scan [file:/home/q/tomcat/lib/cobertura.jar] from classloader hierarchy

解决方法:

拷贝一个cobertura.jar到/home/q/tomcat/lib/


TAG: java覆盖率工具

 

评分:0

我来说两句

Open Toolbar