计划在开发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中,如下: