JMETER脚本开发(1)——录制及调试脚本

前言:为降低JMeter入门门槛,先使用脚本录制的方式(BadBoy, 一种自动化测试工具,可导出为Jmeter脚本),然后针对此脚本进行初步开发及调试。Jmeter自身也提供以代理的方式录制脚本,不推荐使用,具体缺点可自行查阅。然而, 更推荐自己手动写脚本,录制后导入Jmeter还需要自己调试,比较麻烦。后面内容主要介绍Jmeter参数化、集合点、关联、检查点以及Jmeter元件运行顺序。

一、BadBoy简介

1. BadBoy下载地址:http://www.badboy.com.au/

2. BadBoy脚本录制

  • 2.1 访问http://www.sogou.com并录制相关操作
    • 录制脚本步骤及基本工具的使用
      • 录制脚本:在搜索框输入http://www.sogou.com/,点击回车,工具左侧STEP下出现操作,右侧出现搜狗主页
      • 添加文本检查点:菜单栏Tools->Add Assertion for Selection
      • 文本参数化: 菜单栏Views->Summary View; Summary View->Variables tab-> 右键Add Variable...
      • 并发请求:菜单栏Tools->Run Background Threads->Number of Threads(线程并发数量)、Stagger time(请求间隔时间)、clear cookies each iteration(是否清除Cookie)
      • 查看测试结果:菜单栏Tools->View->Report->Detail Report\Summary Report\Review Report
    • 实践
      • 访问搜狗网站,搜索“携程”,检查网页是否有文本“携程”,具体操作步骤见动图1.(备注:搜索中文时一开始出现乱码,此时将utf8改成gbk即可)                    JMETER脚本开发(1)——录制及调试脚本
      • 文本参数化JMETER脚本开发(1)——录制及调试脚本
      • 并发请求及查看报告
      • JMETER脚本开发(1)——录制及调试脚本JMETER脚本开发(1)——录制及调试脚本

录制完成后直接导出,然后导入到jmeter中。 

--------------------后面有些部分可以用BadBoy录制操作,不录制并不影响,可以手动添加----------------

二、Jmeter参数化设置

Jmeter共有三种参数化方式:用户参数CSV Data Set Config参数化、函数助手参数化

2.1 用户参数

(1)添加前置处理器->用户参数

JMETER脚本开发(1)——录制及调试脚本

在用户参数中可以添加变量,添加用户,上图有两个变量:user和password,只有一个用户。

(2)修改Http请求元件(同请求一起发送参数,添加两个参数;名称可自定义,参数值的格式都是${value},需与自己用户参数中的变量名一致)

JMETER脚本开发(1)——录制及调试脚本

(3)运行,查看“察看结果树”,可以发现http请求地址上已经加上了两个变量及分别所对应的值

JMETER脚本开发(1)——录制及调试脚本

2.2 CSV Data Set Config参数化

(1)本地新建一个txt文档,user.txt

JMETER脚本开发(1)——录制及调试脚本

(2)添加配置文件->CSV 数据文件设置

JMETER脚本开发(1)——录制及调试脚本

 填入文件名、变量名称(user,password)即可,其他的是默认值

(3)将之前添加的"用户参数"设为“禁用”,然后将线程组的并发用户数设置为2(因为有两个用户嘛)直接运行,观察结果树(由于我们CSV设置的变量名称跟之前 用户参数 设置的变量名称是相同的,所以此处不需要再修改 HTTP请求元件中的变量,否则需要改成相应的变量名称。)从下面的结果中可以看到,两个用户名和密码都已经有啦

JMETER脚本开发(1)——录制及调试脚本

JMETER脚本开发(1)——录制及调试脚本

2.3 函数助手参数化

(1)菜单栏->选项->函数助手对话框

此处在对话框中选择Random,可以产生随机数;填写完最小值1,最大值100后,点击生成,得到函数;复制一下。

JMETER脚本开发(1)——录制及调试脚本

(2)修改Http请求元件

JMETER脚本开发(1)——录制及调试脚本

(3)点击运行,查看结果数;可以看到密码已经改成一个随机数啦

JMETER脚本开发(1)——录制及调试脚本

三、 Jmeter集合点

        性能测试需要模拟大量用户并发,集合点能够尽量让虚拟用户同一时刻发送请求,在Jmeter中集合点是通过定时器来完成的。

下面只介绍Synchronizing Timer(同步定时器),其作用是:阻塞线程,直到指定的线程数量到达后,再一起释放,可以瞬间产生很大的压力;其他定时器的使用可参考 https://www.cnblogs.com/imyalost/p/6004678.html

Number of Simulated Users to Group by: 是指模拟用户的数量,即指定同时释放的线程数数量

Timeout in milliseconds:超时时间,即超时多少毫秒后同时释放指定的线程数

JMETER脚本开发(1)——录制及调试脚本

四、Jmeter关联

Jmeter关联有两种方法,一种是正则表达式,另一种是XPath Extractor。所谓关联,是指请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据。下面只介绍利用正则表达式实现关联。

(1)正则表达式常用操作符:https://blog.****.net/qq_18546255/article/details/64905747

(2)Jmeter中关联的使用:https://blog.****.net/zhangchaoy/article/details/57418406

         文章中为了获取某城市的天气信息,先根据GetCityCode(一个http接口)中的响应信息,利用正则表达式提取器提取出citycode,然后将citycode传递给获取天气信息的接口(GetWeatherInfo)。具体操作参考原文,下面介绍正则表达式提取器的填写。

JMETER脚本开发(1)——录制及调试脚本

引用名称:下一个请求要引用的参数名称,如填写citycode,则可用${citycode}引用它

正则表达式:()括起来的部分就是要提取的。

模板:$1$表示解析到的第1个值

匹配数字:0代表随机取值,1代表全部取值,通常情况下填0。

五、Jmeter检查点/断言

在实际测试过程中,响应断言基本能满足80%以上的验证问题,因此此处只介绍Response Assertion(响应断言).

响应断言是对服务器的响应数据进行规则匹配。

JMETER脚本开发(1)——录制及调试脚本

可以看到响应断言中:

(1)Apply to

关于应用范围,我们大多数勾选“main sample only” 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,可以触发多个服务器请求,就有main sample  和 sub-sample之分了。

(2)要测试的响应字段

勾选“响应文本”,会在响应数据中进行校验;

勾选“响应代码”,匹配响应代码,比如HTTP协议返回200代表成功

(3)匹配规则

勾选“包括”,意味着只要相应数据中包含要校验的字段,任务就算成功,支持正则表达式;

勾选“匹配”,那么响应内容要完全匹配需要匹配的内容即代表响应成功,大小写不敏感,支持正则表达式;

勾选“Equals”:响应内容要完全等于需要匹配的内容才代表响应成功,大小写敏感,需要匹配的内容是字符串非正则表达式

勾选“Substring”:响应内容包含需要匹配的内容才代表响应成功,大小写敏感,需要匹配的内容是字符串非正则表达式

(4)要测试的模式

即需要校验的数据值。

举个很简单的例子:判断响应文本中是否包含Liu Xun Park(勾选响应文本,Substring, 添加模式输入Liu Xun Park, Custom failure message中输入no Liu Xun Park)

原响应文本为:(参考上面查天气的例子)可见只有Lu Xun Park

JMETER脚本开发(1)——录制及调试脚本

JMETER脚本开发(1)——录制及调试脚本

查看结果树,可以发现错误

JMETER脚本开发(1)——录制及调试脚本

将响应文本需匹配的文本改成Lu Xun Park将不会报错。

六、Jmeter元件执行顺序

Jmeter元件执行顺序类似二叉树的中序遍历,先执行根节点再执行子节点。而对于元件的控制域,则从各个元件的层次结构判断每个元件的作用域。

Jmeter元件执行顺序逻辑如下:

  • 配置元件:元件会影响其作用范围内的所有元件
  • 前置处理器:元件在其作用范围内的每一个sampler元件之前执行
  • 定时器:元件对其作用范围内的每一个sampler 有效
  • 取样器:取样器是典型的不与其它元件发生交互作用的元件,因此不存在作用域的问题,逻辑控制器只对其子节点的取样器有效,而其它元件需要与取样器(sampler)等元件交互。
  • 后置取样器:元件在其作用范围内的每一个sampler元件之后执行
  • 断言:元件对其作用范围内的每一个sampler 元件执行后的结果执行校验
  • 监听器:元件收集其作用范围的每一个sampler元件的信息并呈现

举个例子:

JMETER脚本开发(1)——录制及调试脚本

上面的测试计划中元件的执行顺序是:

(1)执行“执行线程组”,如果有多个线程组,可以在测试计划中设置顺序执行还是同时执行

(2)执行“简单控制器”

(3)执行配置元件“HTTP Cookie管理器”

(4)执行前置处理器“用户参数”

(5)执行定时器“Synchroniziong Timer”

(6)执行取样器“HTTP请求1”

(7)执行后置处理器“正则表达式提取器”

(8)执行断言“响应断言”

(9)执行配置元件“HTTP Cookie管理器”

(10)执行前置处理器“用户参数”

(11)执行定时器“Synchronizing Timer”

(12)执行取样器“HTTP请求2”

(13)执行后置处理器“正则表达式提取器”

(14)执行断言“响应断言”

(15)执行“HTTP请求3”,“HTTP Cookie管理器”将不覆盖此请求

(16)执行过程中在“查看结果数”中可以查看结果。此元件是在取样器之后开始工作的。

 

 

后续会更新Jmeter的常用脚本开发,包括Java请求, ftp请求,JDBC请求,Junit Request, SOAP/XML-RPC Request等