一、脚本录制(Jmeter):
Jmeter 脚本(.jmx)为 xml 格式,树形结构,由元件组成,使用“取样器”产生请求。
在“工作台”添加“HTTP 代理服务器”
端口:
代理服务器的端口,默认 8080,可自行修改,但不要与其它应用端口冲突
目标控制器:录制的脚本存放的位置,可选择项为测试计划中的线程组
分组:
对请求进行分组。“ 分组”的概念是将一批请求汇总分组,可以把 url 请求理解为组。
“不对样本分组”: 所有请求全部罗列
“在组间添加分隔”: 加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,
无实际意义
“每个组放入一个新的控制器”: 执行时按控制器给输出结果
“只存储每个组的第一个样本”: 对于一次 url 请求,实际很多次 http 请求的情况,这
个选项很好用,因为我们常常是不关心后面的那些请求的。
记录 HTTP 信息头:
录制 request 的 head 信息
添加断言:
录制时加入空的检查点
Regex matching:
录制时加入空的正则匹配
在浏览器中录制
启动 HTTP 代理服务器后,打开浏览器(IE,Firefox,Opera 等),添加代理,地址填
写本机 ip 或 host name,端口填写刚刚设置的代理端口,在浏览器中进行正常网页浏览,即
可录制下对应的操作。
二、脚本录制(Badboy):
使用 jmeter 的代理服务器可以顺利录制完整的 http 请求,包括请求的头;但无法录制
cookies,对于网站脚本,大多需要 cookies 支持,可以使用 badboy 来录制。Badboy 是澳大
利亚的一个软件公司设计的,有免费版可以下载。当然不通过录制也可以自己添加 cookies
Badboy 使用:
下载安装包,一键安装,“ 开始”>“程序”>“badboy”
点击红色的 record 按钮开始录制,输入 url,与在浏览器中操作一样。左边的脚本栏会
显示录制下来的请求。
录制完成后,“ File”>“Export to Jmeter”, 保存成 jmeter 的脚本 jmx 文件;
用 jmeter 打开脚本,可以看到比较完整的请求。
三、参数化:
方法一:使用“函数助手”添加从文件中读取字符串的函数。
通过菜单“选项”à“函数助手对话框”调出“函数助手”。 选择“__StringFromFile”
填写文件路径;可以填入命名以便在其它地方使用该函数。点击生成。“ 函数助手”保
留最近一次生成的函数信息。拷贝字符串,粘贴到需要调用该函数的地方即可,如:
在其它地方调用时使用函数填写的命名${命名},如${keywords}:
方法二:使用“CSV Data Set Config”元件
在脚本中添加“配置元件”à“CSV Data Set Config”
Filename 与 Variable Names 的定义与“__StringFromFile”函数一样,填写后即可使用。
调用时使用 Variable Names 的命名${填写的 Variable Names},如${keywords}:
四、使用关联参数:
在 http请求下加入“后置处理器”>“
正则表达式提取器”:
引用名称即使用的参数名;填入正则表达式;模板选取匹配的组;匹配数字为匹配的个
数,负数表示全部匹配;缺省值为没有匹配到时的取值。
示例中用正则表达式匹配出产品 id 作为后续使用的参数。
提取到的参数,调用时用${product_id_1},${product_id_2},${product_id_3}……;
如果想要得到匹配出的参数的个数,用${product_id_matchNr};如果想随机选取其中一个,
只需将匹配数字设为0,使用${product_id}调用即可。
可以一次匹配多组;示例中只匹配了一个,假如正则表达式为 name="chkProductIds"
id="chk(.+?)" value="(.+?)",就会有两组参数。想获得匹配到的组个数用${product_id_g}。模板针对的是匹配到的字符串再做组的区分,比如希望${product_id}取出的是第二组参数的值,用$2$。
五、添加检查点:
在脚本中添加“断言”à“响应断言”
使用正则表达式进行检查,可以选择正则的模式匹配规则,以及检查的文字段。
六、设置思考时间:
在脚本中添加“定时器”à“固定定时器”
设定延迟时间。
七、设置集合点:
在脚本中添加“定时器”à“Synchronizing Timer”
设置集合点处的并发用户数,即“多少”个用户达到集合点后再执行。
八、使用 cookies:
访问的页面需要 cookies 时,在脚本中加入“配置元件”>“
HTTP Cookies 管理器”,
要点:cookies 管理器元件需要位于需要使用 cookies 的请求的上一级节点。
在示例中加入了一个事务控制器,在该任务控制器下的节点都使用同一个 cookies 管理器
九、模拟浏览器操作:
HTTP Cache 管理器
一般来说不建议使用,因为在 LR 中我们一般也不让页面 cache,避免由于 cache 导致
压力不足,结果过于乐观。
HTTP 请求的“从HTML 文件获取所有内含的资源”
如果勾选了该项,则对 html 文件所调用的外部链接也会产生压力,响应的服务必须是
在待测系统范围内,即 该服务也是受压的系统之一。一 般来说当不具备该服务环境时不勾选。
Embedded URLs must match
这个用于匹配 html 中的资源链接,正则表达式,只有匹配符合的才会去请求比如正则
表达式http://www\.baidu\.com/.*,意味着只有http://www.baidu.com相关的链接才会被请求。
十、控制器实现脚本逻辑:
If 控制器:
条件符合时执行控制器的子节点内容
示例:判断${is_run}=1 是否成立,如果成立就执行 http 请求;复选框“Evaluate for all
children?”表示是否对所有子节点使用判断条件,不选择的话,只对第一个子节点生效。
无 else 判断,可以用非条件来实现。
随机控制器:
随机执行某一个子节点内容
示例中随机控制器下有四个子节点:HTTP 1、HTTP 2、简单控制器、HTTP 3,简单控
制器下有两个子节点:HTTP 3、HTTP 4;
当复选框“忽略控制器块”未勾选时,简单控制器是作为一个节点跟其它随机控制器子
节点一起参与随机执行;勾选时,简 单控制器下的子节点直接参与其它随机控制器子节点一
起参与随机执行。
随机顺序控制器:
子节点全部执行,但顺序随机。
循环控制器:
设置执行控制器子节点的次数,也可以设置永远执行。
十二、示例脚本(Examples.jmx)内容:
1. https 脚本:https get 请求
2. icbulogin
脚本:https post 请求,cookies 管理器,head 管理器,断言(检查点)
3. icbuwww1
脚本:参数化 unique 方式,关联参数(获取参数个数判断是否执行请求,
随机选择一个参数)
4. icbuwww2
脚本:参数化 sequential 方式,关联参数(获取参数个数判断是否执行请求,
固定选择参数)
5. 集合点脚本:集合点(同步定时器)
6. 逻辑控制:仅一次控制器(init),switch(根据不同的 vuser 选择不同请求),随机控制器(随机选取一个请求执行),随机顺序控制器,
十三、设置场景
设置测试计划:
测试计划就是一个完整的场景
“独立运行每个线程组”: 勾选以后所有的线程组都是顺序执行的了。一般不勾选,让所有
的线程组并发启动。
“函数测试模式”: 勾选后会有详细的请求记录,消耗资源,影响客户端性能。一般不勾选。
用户定义的变量:全局变量
添加线程组:
取样器错误后要执行的动作:继续,停止线程,停止测试
线程数:可理解为当前线程组下脚本运行的“并发用户数”。
RampUp
Period (in seconds):开始运行时线程数在“设定的时间”内由 0 增加到设置值。
循环次数:当前线程组下脚本运行循环次数;“ 永远”选项,无限次循环
启动时间:脚本自动启动时间
结束时间:脚本自动结束时间
持续时间(秒):持续运行的时段
启动延迟(秒):延迟指定时间后启动
线程组参数分析:
1. 取样器错误后执行的动作:“ 停止线程”为停止当前的线程运行;“ 停止测试”为停止测
试计划运行。
2. RampUp
Period 表示从 0 增加到指定线程数的时间,是线性增加,如:线程数为20 个,
RampUp
Period 为 50s,50/20=2.5s/个,所以是每隔 2.5s 增加一个线程。
3. 循环次数:勾选“永远”, 启动后必须手工“停止”才会停止;次数达到时若调度器未
运行完毕,则调度器无效,停止执行;调度器中运行完毕,次数尚未达到,则次数设置
无效,停止执行。
4. 调度器:在手工启动后生效,设置生效原则:启动延迟的优先级高于启动时间,持续时
间优先级高于结束时间,设置针对“未来时间”有效,针对“过去时间”无效;即启动
延迟与启动时间同时设置如果不一致,则以启动延迟为准,持续时间与结束时间同时
设置如果不一致,则以持续时间为准,设置为过去的时间则不生效。
线程运行状态显示:
在 jmeter 右上角处。图示含义为:绿色表示正在运行;共 20 个线程,已启动 8 个。
十四、响应数据
图形结果:添加“监视器”à“图形结果”
显示内容含义:
样本数目:运行时得到的取样器响应结果个数
最新样本:最近一个取样器结果的响应时间
平均:所有取样器结果的响应时间平均值
偏离:所有取样器结果的响应时间标准差
吞吐量:每分钟响应的取样器结果个数
中值:所有取样器结果的响应时间中间值
显示图线为随时间变化曲线,但 x 轴不是时间轴,是取样器个数的均匀分布轴
察看结果树:添加“监视器”à“察看结果树”
显示内容含义:
取样器结果:显示的是取样器相关参数(客户端参数与响应参数)
请求:http request
响应数据:http response data
聚合报告:添加“监视器”à“聚合报告”
显示内容含义:
Label:取样器名称
Samples:运行时得到的取样器响应结果个数
Average:所有取样器结果的响应时间平均值
Median:所有取样器结果的响应时间中间值
90%Line:所有取样器结果的响应时间 90%线
Min:所有取样器结果的响应时间最小值
Max:所有取样器结果的响应时间平均值
Error%:出错的取样器结果占所有取样器结果的比例
Throughput:每秒钟响应的取样器结果个数
KB/sec:每分钟响应的数据流量
Summary Report:添加“监视器”à“Summary Report”
显示内容含义:
Label:取样器名称
Samples:运行时得到的取样器响应结果个数
Min:所有取样器结果的响应时间最小值
Max:所有取样器结果的响应时间平均值
Std.Dev.:所有取样器结果的响应时间标准差
Error%:出错的取样器结果占所有取样器结果的比例
Throughput:每秒钟响应的取样器结果个数
KB/sec:每分钟响应的数据流量
Avg.Bytes:所有取样器返回 http response data 字节数的平均值
将响应情况保存到文件中以供统计:
给单个取样器添加监视器后,在“所有数据写入一个文件”下方的输入框输入响应情况
记录的保存文件,或者浏览选择;可使用全路径,也可使用相对路径,相对路径基准为脚本
保存路径;多个取样器使用一个监视器时,得到的统计结果是累加起来的。
十五、服务器资源监控(Linux)
Linux 服务器上加入监控脚本:
登录到被监控的服务器上,将 status 脚本放上去。该脚本执行时会在所在路径生成
status.xml 文件,可以直接将 status 脚本放在 web server 的目录下,也可以用软链接来链到
status.xml 文件。下面介绍在基于apache 的 web server 上的配置方法:
在 apache 的配置文件 httpd.conf 中找到 DocumentRoot,一般默认是 apache 目录下的
htdocs,将 status 脚本放到该目录下;
更改执行权限:
chmod 744 status
启动该脚本:
./status start
启动起来之后就会在当前目录下产生 status.xml 文件
不需要监控时,停止该脚本:
./status stop
Jmeter 上使用监控:
使用
打开 jmeter,建立一个线程组,添加一个 http 请求,ip 就是要监控的服务器地址,端口
号就是 apache侦听的 http端口,协议是“http”, 路径是“/status.xml”, 勾选“用作监视器”;
再为该 http请求添加一个“固定定时器”组件和一个“监视器结果”组件,“ 固定定时
器”的延时要设置为大于 1 秒的时间,即数据的采样时间。
在线程组中循环次数设置勾选“永远”;
Run 一下,就可以在监视器结果上看到刚刚添加的监控服务器了,目前已经监控了6 个
参数:cpu%user,cpu%iowait,load,mem%(used/total),swap in,swap out。
将监控到的资源情况保存到文件中以供统计:
方法同“将响应情况保存到文件中以供统计:”
十六、统计分析
将记录响应情况和资源监控情况的文件生成 html 图表报告以便进行分析(注意:记录
文件格式为 xml,若不完整是无法解析的;即脚本运行中生成的文件是无法解析的,必须在
脚本运行完毕后才能进行以下处理);生成方法如下:
设置 jmeter 保存的文件地址
打开 jmeter 目录的 bin 目录下的JmeterDataChart.
ini 文件,按照格式:
response=响应文件路径
resources=监控资源文件路径
进行填写。比如有 2 个响应文件 res/r1.jtl,res/r2.jtl,1 个监控资源文件 res/linux.jtl,则
填写文件内容为:
response=res/r1.jtl
response=res/r2.jtl
resources=res/linux.jtl
保存退出。
双击运行 bin 目录下的JmeterDataChart.
bat,进行文件的解析和图表生成。解析处理成
功后,在 bin 目录下会生成一个名为 CurDataChartIndex.
html,双击打开,可以看到相应的
图表链接,是原文件名+ res.
html 的文件
点击链接打开报告,IE 提示脚本风险
点击允许,即可看到完整的图表:
响应图表:
资源监控图表:
注意:因为该图表采用 vml 编写,在不支持 vml 的浏览器上无法显示。
附录
监控器实现的是 linux 系统上的资源监控,要求:服务器上至少有一个 web server
(因需要通过http请求获取资源xml), 用 于生成服务器资源xml的脚本中使用了sysstat
包中的指令,所以需要安装 sysstat 包。
如果被监控的 linux 上没有安装 sysstat 包,是无法正常生成监控数据的,这里附上
sysstat 包的安装方法:
首先到 http://perso.wanadoo.fr/sebastien.godard/ 下载最新的版本,最好是源码包,
比如 sysstat5.1.1.
tar.gz
1.解包:
tar zxvf sysstat5.1.1.
tar.gz
2.安装:
cd sysstat5.1.1
make config
这步可以省略,有些发行版中会出错;如果不用这个命令,可以直接安装到其默认
的/usr/local/lib 目录中
make
编译
make install
安装__