搭建这个性能测试框架是希望能够让每个人(开发人员、测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程。因为,往往配置一个性能环境可能需要很长的时间。

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的命令:

1
2
3
4
5
6
7
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格式的文件解析成图表。

1
2
3
4
5
6
7
8
9
10
11
12
$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的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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

「转」基于Jmeter和Jenkins搭建性能测试框架的更多相关文章

  1. 基于Jmeter和Jenkins搭建性能测试框架

    搭建这个性能测试框架是希望能够让每个人(开发人员.测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程.因为,往往配置一个性能环境可能需要很长的时间. 1.性能测试流程 该性能测试框架工 ...

  2. Jmeter+ant+Jenkins接口自动化框架搭建

    摘自:https://testerhome.com/topics/13389 一.背景  上一篇讲了Jmeter 接口自动化-脚本数据分离实例,我们知道怎么利用Jmeter去编写接口自动化脚本,但是接 ...

  3. jmeter+ant+jenkins搭建接口自动化测试环境

    jmeter+ant+jenkins搭建接口自动化测试环境(基于win) 1.jmeter jmeter依赖java运行环境,所以需要提前下载jdk并配置好环境变量 官网下载(http://jmete ...

  4. 基于Jmeter+maven+Jenkins构建性能自动化测试平台

      一.目的: 为能够将相关系统性能测试做为常规化测试任务执行,且可自动无人值守定时执行并输出性能测试结果报告及统计数据,因此基于Jmeter+maven+Jenkins构建了一套性能自动化测试平台 ...

  5. 基于Jmeter跟Jenkins的自动化性能测试的一站式解决方案(转)

    www.MyException.Cn  网友分享于:2015-08-26  浏览:0次   基于Jmeter和Jenkins的自动化性能测试的一站式解决方案 作者: Yu, Qingguo Shen, ...

  6. 「MoreThanJava」Day 1:环境搭建和程序基本结构元素

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  7. Jmeter+Ant+Jenkins搭建持续集成的接口测试(推荐 Mark)

    转自:http://my.oschina.net/hellotest/blog/516079 目录[-] 一.Jmeter+ant 二.Jmeter+ant+Jenkins 三.Tomcat配置虚拟目 ...

  8. Jmeter+Ant+Jenkins搭建持续集成的接口测试框架

    https://my.oschina.net/hellotest/blog/516079 摘要: 一个系统通常有多个接口,软件的生命周期中,我们会不断的去优化老的接口和开发新的接口,那么在这个过程中, ...

  9. 基于Jmeter和Testlink的自动化测试框架研究与实施

    关于测试框架搭建的详细过程,会在另一篇文章中详细介绍:http://www.cnblogs.com/leeboke/p/6145977.html 摘 要 目前基于Jmeter的接口自动化测试框架,大多 ...

随机推荐

  1. php laravel 框架搭建与运行

    目录 安装 composer 安装 laravel 运行 php hello world 一.安装 composer (mac) 下载 composer.phar 下载地址:https://getco ...

  2. 利用npm安装/删除/发布/更新/撤销发布包

    利用npm安装/删除/发布/更新/撤销发布包 什么是npm? npm是javascript的包管理工具,是前端模块化下的一个标志性产物 简单地地说,就是通过npm下载模块,复用已有的代码,提高工作效率 ...

  3. [洛谷P3935]Calculating

    题目大意:设把$x$分解质因数的结果为$x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n}$,令$f(x)=(k_1+1)(k_2+1)\cdots (k_n+1)$,求$\su ...

  4. Linux相关——关于文件调用

    本文主要记录几个常见文件调用(表示为了造数据试了n种方法,,,发现了一些神奇的东西,会在下面一一说明. 首先在程序中我们可以打开和关闭程序. 常见的freopen用法简单,但是只能使用一次,如果在程序 ...

  5. [Leetcode] scramble string 乱串

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...

  6. 【BZOJ 3643】Phi的反函数 数搜索

    这道题是典型的数搜索,讲究把数一层一层化小,而且还有最重要的大质数剪枝. #include <cstdio> #include <cmath> typedef long lon ...

  7. oracle与mysql的group by语句

    之所以去纠那么细节的问题,是因为之前有过一个这样的场景: 有个同学,给了一条数据库的语句给我,问,为啥这样子的语句在oracle语句下执行不了. 1 select * from xx where xx ...

  8. react 记录:React Warning: Hash history cannot PUSH the same path; a new entry will not be added to the history stack

    前言: react-router-dom 4.4.2 在页面中直接使用 import { Link } from 'react-router-dom' //使用 <Link to={{ path ...

  9. css之postion定位

    css position之初识 我们先看看position定位有那几个属性,下面是我从w3c的截图,为我们认识定位做初步的了解 通过上面这张图嘞,我们知道了position有5个属性,那么下面,我就来 ...

  10. centos7装机时更改网卡名为eth0操作