编辑推荐: |
本文来自于csdn,本文主要讲述了搭建性能测试流程,环境需求,安装必要软件,Jmeter
GUI上制定测试计划,生成测试计划jmx文件,non-GUI方式执行Jmeter,生成报告图表等方法。 |
|
1、性能测试流程
该性能测试框架工作的流程主要有:触发测试–>部署测试脚本–>部署被测系统–>Jmeter打压–>被测系统日志分析,5个阶段。
体现在Jenkins上,就是下面这个jenkins 的MultiJob
Project——Performance-test-jobs:
注意:在选择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选项对属性值进行赋值。
4.2、添加HTTP Request
由于我们的测试是发送HTTP请求给Serving服务器,因此这里选择添加的Sampler是HTTP
Request。
这里需要添加被测服务器的域名或者网址,这里也采用函数__P()设置属性名和默认值的形式设置这个属性。
另外,还要设置请求的具体地址Path。由于我们测试过程中请求的网址是不一样的。因此需要需要对这个Path进行参数化,指定为变量${path}。又由于我们请求的网址是存放到一个叫作path.log的文件中的。因此,参数化的方法适宜采用CSV
Data Set Config。这里Filename我们设置为属性UrlFile,该属性可以在使用no-GUI模式启动Jmeter进行测试时,使用–jmeterproperty选项指定具体的文件。
4.3、添加Listener
在TestPlan上右击,Add–>Listener–>Aggregate
Report。
另外,添加了PerfMon Metrics Collector的Listner,来收集被测试机的CPU,memory信息。
可以指定将report保存到某个文件,如上图中所示保存到jtl文件,在非GUI模式下运行Jmeter这是非常必要的。
4.4、生成测试计划jmx文件
一切设置妥当之后,点击菜单栏上的File->Save Test
Plan As.
此步骤可以将该Test Plan保存为.jmx格式的文件。该文件用来进行non-GUI方式进行Jmeter测试。
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 |
|