设为首页 收藏本站
查看: 816|回复: 0

[经验分享] 基于Jmeter和Jenkins搭建性能测试框架

[复制链接]

尚未签到

发表于 2018-1-7 19:46:14 | 显示全部楼层 |阅读模式
  搭建这个性能测试框架是希望能够让每个人(开发人员、测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程。因为,往往配置一个性能环境可能需要很长的时间。

1、性能测试流程
  该性能测试框架工作的流程主要有:触发测试–>部署测试脚本–>部署被测系统–>Jmeter打压–>被测系统日志分析,5个阶段。
  体现在Jenkins上,就是下面这个jenkins 的MultiJob Project——Performance-test-jobs:

DSC0000.jpg   注意:在选择Performance-test-jobs的构建步骤时,要选择Conditional steps(multiple)。
  下面对该性能测试框架搭建的过程进行详细的介绍。

2、环境需求
  整个测试框架需要以下机器:
  1)jenkins master:用于管理测试机、建立性能测试job、启动性能测试、展示性能测试结果。
  2)Load generator:用来给被测试服务器发送请求,当一台Load generator发送的并发请求数达不到测试要求时,可能需要配置多台。Setup ENV阶段的Performance-test-script-deployment以及Run test阶段的job都是运行在这机器上的。
  3)被测试服务器:用于安装被测试服务的机器,分析被测试服务的log的job也是运行在这个机器上的。
  其中,Load generator和被测试服务器都是作为slave节点挂载在jenkins master上的。

3、安装必要软件

3.1、安装Jenkins及插件
  安装Jenkins的步骤,这里不展开讲了。这里主要介绍一下与性能测试有关的jenkins插件——Performance Plugin。这个插件的作用是解析Jmeter生成的测试报告,直观的展示出来。
  安装插件的方法很简单,登陆Jenkins,在Manage Plugins界面搜索“Performance Plugin”点击安装即可。
  如果安装正确,在性能测试job的配置页面的 “Add post-build action” 步骤里面能够看到 “Publish Performance Test Result Report” 选项。

3.2、Jmeter安装及配置
  在性能测试压力机上,下载并安装Jmeter(下载地址:http://jmeter.apache.org/download_jmeter.cgi),解压到目录/usr/local。[下载二进制的]
  之后,下载jmeter-plugins插件JMeterPlugins-Standard-1.2.0.zip(下载地址http://jmeter-plugins.org/downloads/all/)。
  解压后将其中的jar包拷贝至jmeter安装目录/lib/ext/目录(如果没有则创建之)下即可。
  这个插件的作用是,当通过no-GUI方式执行测试之后,将生成的测试结果文件*.jtl解析成图片的形式,比较直观。

3.3、安装系统资源监控插件
  为了监控被测服务器的系统资源,需要在被测试机上安装ServerAgent,下载ServerAgent-2.2.1.zip(下载地址http://jmeter-plugins.org/downloads/all/),并在被测试机上启动startAgent.sh。该插件能够对服务器的 CPU、内存、Swap、磁盘 I/O、网络 I/O 进行监控!

4、Jmeter GUI上制定测试计划
  我们的测试执行实在Jenkins中通过非GUI方式执行Jmeter压力测试的。在JmeterGUI上制定测试计划的目的是,将测试计划保存成.jmx文件,以便能够在Jmeter的非GUI模式下执行测试。

4.1、建立Thread Group
  有三个必须设置的属性(见下图红框部分),这里采用函数__P()设置属性名和默认值的形式设置这三个属性,以方便在使用no-GUI模式启动Jmeter进行测试时,使用–jmeterproperty选项对属性值进行赋值。

DSC0001.jpg
4.2、添加HTTP Request
  由于我们的测试是发送HTTP请求给Serving服务器,因此这里选择添加的Sampler是HTTP Request。
  这里需要添加被测服务器的域名或者网址,这里也采用函数__P()设置属性名和默认值的形式设置这个属性。

DSC0002.jpg   另外,还要设置请求的具体地址Path。由于我们测试过程中请求的网址是不一样的。因此需要需要对这个Path进行参数化,指定为变量${path}。又由于我们请求的网址是存放到一个叫作path.log的文件中的。因此,参数化的方法适宜采用CSV Data Set Config。这里Filename我们设置为属性UrlFile,该属性可以在使用no-GUI模式启动Jmeter进行测试时,使用–jmeterproperty选项指定具体的文件。

DSC0003.jpg
4.3、添加Listener
  在TestPlan上右击,Add–>Listener–>Aggregate Report。
  另外,添加了PerfMon Metrics Collector的Listner,来收集被测试机的CPU,memory信息。

DSC0004.jpg
DSC0005.jpg
DSC0006.jpg   可以指定将report保存到某个文件,如上图中所示保存到jtl文件,在非GUI模式下运行Jmeter这是非常必要的。

4.4、生成测试计划jmx文件
  一切设置妥当之后,点击菜单栏上的File->Save Test Plan As.
  此步骤可以将该Test Plan保存为.jmx格式的文件。该文件用来进行non-GUI方式进行Jmeter测试。

DSC0007.jpg
5、non-GUI方式执行Jmeter
  non-GUI方式执行Jmeter的命令:
  

jmeter.sh -n -t test.jmx -l result.jtl \  
--jmeterproperty threadCount=${CONCURRENCY} \
  
--jmeterproperty LoopCount=${LOOPCOUNT} \
  
--jmeterproperty adclient=${SERVER} \
  
--jmeterproperty UrlFile=path.log \
  
--jmeterproperty RampUp=${RAMPUP} \
  
--jmeterproperty throughput=${THROUGHPUT}
  

  说明:
  -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
  -t 测试文件 -> 要运行的 JMeter 测试脚本文件
  -l 日志文件 -> 记录结果的文件
  –jmeterproperty设置test.jmx中的属性(见“Jmeter GUI上制定测试计划”部分)

6、生成报告图表
  我们可以通过Jenkins上安装的JMeterPlugins-Standard插件来将测试结果文件.jtl格式的文件解析成图表。
  

$JMETEREXT= /usr/local/apache-jmeter-2.13/lib/ext  
java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter \
  
--generate-png ResponseTimesOverTime.png --input-jtl result.jtl  --plugin-type ResponseTimesOverTime
  

  
java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter \
  
--generate-png CPU.png --input-jtl cpu.jtl  --plugin-type PerfMon
  

  
java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter \
  
--generate-png MEM.png --input-jtl  mem.jtl  --plugin-type PerfMon
  

  
java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter \
  
--generate-png TransactionsPerSecond.png --input-jtl  trans.jtl  --plugin-type TransactionsPerSecond
  


7、job shell设置
  Jenkins的job中通过参数传递给jmeterproperty中的变量中。
  Execute shell的内容:
  

source /etc/profile  
THROUGHPUT=`expr 60 \* ${QPS}`
  
RUNFOLDER=/usr/local/jmeter-demo/src/test/jmeter
  
JMETERBIN=/usr/local/apache-jmeter-2.13/bin
  
JMETEREXT=/usr/local/apache-jmeter-2.13/lib/ext
  
RESULTJTL=$RUNFOLDER/result.jtl
  
CPUJTL=$RUNFOLDER/cpu.jtl
  
MEMJTL=$RUNFOLDER/mem.jtl
  
TRANSJTL=$RUNFOLDER/trans.jtl
  
rm -f $RUNFOLDER/path.log
  
rm -f $RUNFOLDER/*.jtl
  
rm -f $RUNFOLDER/*.png
  
rm -f $WORKSPACE/*.png
  
rm -f $WORKSPACE/*.jtl
  

  
cd /usr/local/jmeter-demo/src/test/jmeter && python appending.py ${APPENDING}
  

  
cd /usr/local/jmeter-demo/src/test/jmeter && $JMETERBIN/jmeter.sh -n -t test.jmx -l result.jtl \
  
--jmeterproperty threadCount=${CONCURRENCY} \
  
--jmeterproperty LoopCount=${LOOPCOUNT} \
  
--jmeterproperty adclient=${SERVER} \
  
--jmeterproperty UrlFile=path.log \
  
--jmeterproperty RampUp=${RAMPUP} \
  
--jmeterproperty throughput=${THROUGHPUT}
  

  
java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter --generate-png ${RESULTJTL%.*}_ResponseTimesOverTime.png --input-jtl  $RESULTJTL  --plugin-type ResponseTimesOverTime
  

  
java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter --generate-png ${CPUJTL%.*}_CPU.png --input-jtl  $CPUJTL  --plugin-type PerfMon
  
java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter --generate-png ${MEMJTL%.*}_MEM.png --input-jtl  $MEMJTL  --plugin-type PerfMon
  
java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter --generate-png ${TRANSJTL%.*}_TransactionsPerSecond.png --input-jtl  $TRANSJTL  --plugin-type TransactionsPerSecond
  

  
cp /usr/local/jmeter-demo/src/test/jmeter/*.png $WORKSPACE
  
cp /usr/local/jmeter-demo/src/test/jmeter/result.jtl $WORKSPACE
  

  

  本文转自:http://blog.csdn.net/liuchunming033/article/details/52186157 感谢分享

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432702-1-1.html 上篇帖子: Jenkins添加用户 下篇帖子: 持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表