一、脚本录制(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
安装__
- jmeter笔记(9)--JDBC Request的使用
JDBC Request可以向数据库发送一个JDBC(Java Data Base Connectivity)请求(sql语句),获取返回的数据库数据进行操作.它需要和JDBC Connection ...
- jmeter笔记8
JMETER接口性能测试方案 JMETER简介 JMeter可以用于测试静态或者动态资源的性能(文件.Servlets.Perl脚本.java对象.数据库和查询.ftp服务器或者其 ...
- jmeter笔记5
性能测试是任何分布式或Web应用程序测试计划的重要组成部分.在计划和开发周期中进行性能评价,可以保证交付给客户的应用程序满足客户对于高负载.可用性和可伸缩性的要求.提前确定软件的负载限制可以为适当地进 ...
- jmeter笔记4
软件测试中使用JMeter测试Web应用 JMeter作用领域 JMeter可以用于测试静态或者动态资源的性能(文件.Servlets.Perl脚本.java对象.数据库和查询.ftp服务器或者其他 ...
- jmeter笔记3
1. 使用JMeter做性能测试(Windows) 1.1. 启动JMeter 下载JMeter的安装包,点击安装包\jakarta-jmeter-2.3RC4\bin下的jmeter.bat文件即 ...
- jmeter笔记2
使用jmeter它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项. 讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测 ...
- jmeter笔记1
使用 JMeter 分布式性能测试 作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的, 所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用 ...
- JMeter笔记4:测试结果-聚合报告的字段说明
1.Lable :定义 HTTP 请求名称2.Samples :表示这次测试中一共发出了多少个请求3.Average :平均响应时长---默认情况下是单个Request的平均响应时长,当使用Trans ...
- JMeter笔记3:聚合报告之90%Line参数说明
看看JMeter 官网是怎么说的? 90% Line - 90% of the samples took no more than this time. The remaining samples a ...
随机推荐
- C# this.invoke()作用 多线程操作UI
Invoke()的作用是:在应用程序的主线程上执行指定的委托.一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); //测试的窗体 public class ...
- 通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用 矩形的左上角坐标来标识,包含: 添加两个属性:矩形左上角坐标startX和startY。 两个构造方法: 带4个参数的构造方法,用于对startX、startY、width和height属性 初始化; 不带参数的构造方法,将矩形初始化为左上角坐标、长和宽都为0 的矩形; 添加一个方法: 判断某个点是否在矩形内部的方法
package b; public class Rect { Double width; Double height; public Double getWidth() { return width; ...
- BZOJ 3144 切糕(最小割)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3144 题意: 思路:我们假设没有那个D的限制.这样就简 单了.贪心的话,我们只要在每一个 ...
- 。JavaSE------初识Java
我的老师告诉我,命运眷顾有志者,天道酬勤. 有时在梦里幻想的再多终究也只是梦, 不如脚踏实地一步步往前走来的踏实. ------------------------------------------ ...
- UVA 1291 十四 Dance Dance Revolution
Dance Dance Revolution Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Su ...
- git生成SSH key
使用https:// 提交GitHub上的私有项目时,需要每次都输入帐号和密码,比较麻烦. 比如我自己的笔记本,在push的时候我可不想每次都输入这些. 那就使用SSH吧,这个需要在GitHub的帐号 ...
- Examples For When-Validate-Item trigger In Oracle Forms
The following example finds the commission plan in the COMMPLAN table, based on the current value of ...
- Web开发——Tomcat的配置
1.选择Tomcat 1.Apache官网http://apache.org/ 2.Tomcat官网http://tomcat.apache.org/ 3.Tomcat下载地址http://tomca ...
- WCF学习资源收集汇总
1.WCF编程 http://www.cnblogs.com/wengyuli/category/217446.html 2.wcf热门问题编程示例 http://blog.csdn.net/book ...
- JAVA中Response的几种用法(设定时间调整到指定页面 ....... )
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%&g ...