计划在开发bbs7的时候,能够把性能测试也集成到持续集成环境hudson里面来,在hudson构建完成项目后,自动地性能测试一把.[[BR]]
在网上查找了一些资料后,发现有一个开源的java项目——jmeter。比较适合我们的项目来做性能测试。[[BR]]
于是鼓捣了两天,过程很曲折,但也总算把环境搭建起来了。下面简单总结一下,搭建的过程.
首先,去jmeter官方网站:http://jmeter.apache.org/download_jmeter.cgi
下载jmeter.虽然公司服务器是linux,但还是建议把
windows和linux版都下载下来.
网上有较多的关于jmeter的入门级教程,可以先搜下,了解下,jmeter的一些概念。如,测试计划,线程组,监听器等等。
我就不婆妈了,此处略去1万字...
然后,怎么搞这个环境呢?大致分为以下几个步聚:[[BR]]
1,应该要有一台可以跑bbs7项目的机器,然后把本地的bbs7打包后上传上去,在机器上布署bbs7,布署完后,检查下项目能否正常启动。[[BR]]
2,接下来在hudson上,将bbs7集成进来。[[BR]]
3,在hudson上添加构建命令驱动jmeter压力测试.[[BR]]
公司两台开发机.dev11(192.168.75.11)和dev12(192.168.75.12),我查看了一下,dev11这台机己经布署了一些日常开发的应用,[[BR]]
但没有bbs7,dev12布署了hudson。为了压力测试时不互相干扰,把bbs7,安装在dev11机器上.把jmeter安装在dev12上。
按照步骤,先在dev11上布署了本地打包的bbs7包,配置resin,启动脚本之类,云云。。。此处省略一万字。最后启动,OK,没问题.[[BR]]
接着,第二步.发现我的同事秦鸿源己经把bbs7 maven项目添加到了hudson上了,只是在maven构建完后,不能自动将代码更新到dev11这台机上.[[BR]]
可以在dev12这台机上ssh一个dev11机器上的脚本,这个脚本的作用是从dev12这台机串上获取最新的代码,像这样:[[BR]]
ssh root@192.168.75.11 /data/hudson_script/bbs7.sh [[BR]]
在dev11机器编写脚本 /data/hudson_script/bbs7.sh,代码如下:
{{{
#!/bin/bash
JAVA_HOME=/usr/java/jdk1.6.0_18/bin
WARPLACE=/data/.hudson/jobs/bbs7/workspace/target
WAR=$WARPLACE/webapp.war
STATICZIP=$WARPLACE/webapp-statics.zip
/etc/init.d/resind_bbs7 stop
rm -rf /data/web/bbs7/*
expect -c "
spawn scp -p root@192.168.75.12:$WAR /data/web/bbs7.war
expect {
\"*assword\" {set timeout 300; send \"pconline\r\";}
\"yes/no\" {send \"yes\r\"; exp_continue;}
}
spawn scp -p root@192.168.75.12:$STATICZIP /data/web/bbs7
expect {
\"*assword\" {set timeout 300; send \"pconline\r\";}
\"yes/no\" {send \"yes\r\"; exp_continue;}
}
expect eof"
cd /data/web
unzip -o bbs7.war -d /data/web/bbs7
cd /data
cd /data/web/bbs7
sed -i 's/localhost\.pconline\.com\.cn/dev11\.pconline\.com\.cn:9099/g' /data/web/bbs7/WEB-INF/view/*.jsp
unzip -o /data/web/bbs7/webapp-statics.zip -d /data/PRG/resin-3.1.8_bbs7/conf
/etc/init.d/memcached_bbs7 restart
/etc/init.d/resind_bbs7 start
}}}
保存后,再回到dev12进入hudson,地址:http://192.168.75.12:8080/hudson-2.1.2/
选择项目bbs7-->设置-->Add build Step ->Execute Shell,添加shell 脚本,如下:
[[Image(jmeter_01.png)]][[BR]]
然后,将apache-jmeter-2.7.tgz上传到dev12服务器上,用tar命令解压.到/data/目录下:[[BR]]
tar -zxvf apache-jmeter-2.7.tgz [[BR]]
因为jmeter可以由用ant驱动,而且使用起来很方便,在dev12机器上,也安装下ant,将apache-ant-1.8.4-bin.tar.gz[[BR]]
上传到dev12上,用tar命令解压.到/data/目录下:[[BR]]
tar -zxvf apache-ant-1.8.4-bin.tar.gz [[BR]]
接下来,将ant与jmeter添加到系统PATH中[[BR]]
vi /etc/profile[[BR]]
添加如下代码[[BR]]
{{{
ANT_HOME=/data/apache-ant-1.8.4
JMETER_HOME=/data/apache-jmeter-2.7
PATH=$PATH:$ANT_HOME/bin:$JMETER_HOME/bin
}}}
注意修改后,需要执行一下
soruce /ect/profile
让设置生效.
还需要注意的是,用ant创建jmeter target的时候,需要ant-jmeter-*.jar的支持,这个jar在/data/apache-jmeter-2.7/extras[[BR]]
目录下,把它复制到/data/apache-ant-1.8.4/lib目录下.
到现在为止,基本运行环境都弄好了,开始准备编写jmeter测试计划了.[[BR]]
jmeter测试计划,实际上是一个xml文件,如果不了解jmeter,手动编写这个XML文件是相当费劲的。在windows安装包中,提供了一个GUI界面,[[BR]]
可以利用它,帮助我们编写测试计划,将apache-jmeter-2.7.zip解压,在lib目录下,双击运行jmeter.bat,然后,就可以看到jmeter客户端界面了[[BR]]
然后创建一个测试计划,然后,在测试计划中创建线程组,然后在创建http://dev11.pconline.com.cn:9099/bbs7[[BR]]
的http请求.最后保存.由于wiki限制了图片只能小于256K,截图都比这个要大,偶就不截图了,网上很多创建测试计划的例子,此处省略1万字...[[BR]]
测试计划保存后,会在lib目录下生成一个*.jmx(* 指测试计划名),把这个jmx文件上传到dev12服务器/data/jmeter_test_plain目录下。[[BR]]
接下来,就是编写ant build 文件,驱动jmeter了,简单示例如下:
{{{
}}}
当然,你觉得如果jmeter测试完成后,把测试报告给开发小组的同事,使用邮件每人发一份的话,会更好,[[BR]]
可以在ant中添加发邮件的任务:[[BR]]
示例如下:[[BR]]
{{{
}}}
由于jmeter的测试告,是一个名为*.jtl文件,实际上它是一个记录了jmeter每次http请求信息的xml文件,直接欣赏这个xml文件,还是很费解的.[[BR]]
可以用这个*.jtl文件拿windows下jmeter GUI作用监听器打开,可以看到测试结果.[[BR]]
你可能觉得,这样还是比较麻烦,如果测试报告,可以直接能以一种赏心悦目的外貌,呈现给你的话,岂不是更爽.[[BR]]
Ant是非常强大的,偶非常喜欢,Ant里面的xslt任务,可以把xml转换成html。大致是像这样的,当然你得编写xsl转换文件.[[BR]]
{{{
}}}
jmeter 提供了一个ant xslt转换jtl测试报告的例子,提供了一个非常漂亮的xsl文件.
偶就不复制粘帖了.经过xslt直接转换成html后,然后再发给开发小组的同事。[[BR]]
ant build文件写好了,在/data/jmeter_test_plain/下写个 ant_test.sh shell 脚本去调用.代码如下:[[BR]]
/data/apache-ant-1.8.4/bin/ant -f /data/jmeter_test_plain/build2.xml[[BR]]
最后,把shell命令添加到hudson bbs7任务的Execute shell中,如下:[[BR]]
[[Image(jmeter_02.png)]][[BR]]
然后,hudson保存下,整个集成过程就完成了