Jmeter断言
断言:让程序自动判断预期结果和实际结果是否一致
提示:
- Jmeter在请求的返回层面有个自动判断机制(响应状态码 2xx:成功,4xx/5xx:失败)
- 但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性。
Jmeter中常用断言
- 响应断言:对任意格式的响应数据进行断言
- json断言:对json格式的响应数据进行断言
- 持续时间断言:对响应时间进行断言
响应断言
作用:对HTTP请求的任意格式的响应结果进行断言
位置:测试计划–>线程组–>HTTP请求–>(右键添加)断言–>响应断言
参数:
参数配置详细介绍:
测试字段:要检查的项(实际结果)
- 响应文本:来自服务器的响应文本,即主体
- 响应代码:响应的状态码,例如:200
- 响应信息:响应的信息,例如OK
- Response Headers:响应头部
- Requests Headers:请求头部
- Requests Data:请求数据
- URL样本:请求URL
- Documents(文档):响应的整个文档
- 忽略状态:忽略返回的响应状态码
模式匹配规则:比较方式
- 包括:文本包含指定的正则表达式
- 匹配:整个文本匹配指定的正则表达式
- Equals:整个返回结果的文本等于指定的字符串(区分大小写)
-
Substring:返回结果的文本包含指定字符串(区分大小写)
- 否:取反
- 或者:如果存在多个测试模式,勾选代表逻辑或(只要有一个模式匹配,则断言就是OK),不勾选代表逻辑与(所有都必须匹配,断言才是OK)
- 注意:Equals和Substring模式是普通字符串,而包括和匹配模式是正则表达式
测试模式:预期结果
- 即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理。
练习:
请求:https://www.baidu.com
检查:让程序检查响应数据中是否包含“百度一下,你就知道“
操作步骤:
1.添加线程组
2.添加HTTP请求
3.添加响应断言
4.添加查看结果树
小结:
(1)什么时候可以使用响应断言?
- 任意HTTP请求的响应结果,都可以使用响应断言
(2)使用”响应断言“的操作步骤?
- 添加线程组
- 添加HTTP请求
- 添加响应断言
- 测试字段:要检查的项(实际结果)
- 模式匹配规则:比较的方式
- 测试模式:预期结果
- 添加查看结果树
JSON断言
作用:对HTTP请求的JSON格式的响应结果进行断言
位置:测试计划–>线程组–>HTTP请求—>(右键添加)断言—>JSON断言
参数:
练习:
请求:http://www.weather.com/data/sk/101010100.html
检查:让程序检查响应的JSON数据中,city对应的内容是否为”北京“
小结:
(1)什么时候可以使用JSON断言?
- 对HTTP请求的响应结果为JSON格式时,可以使用JSON断言
(2)使用"JJSON断言"的操作步骤?
- 添加线程组
- 添加HTTP请求
- 添加JSON断言
- 填写Assert JSON Path exists(实际结果-json路径)
- 勾选Addtionally assert value
- 填写 Expected Value(预期结果)
- 添加查看结果树
断言持续时间
作用:检查HTTP请求的响应时间是否超出要求范围
位置:测试计划–>线程组–>HTTP请求—>(右键添加)断言—>断言持续时间
练习:
请求:https://www.jd.com
检查:让程序检查响应时间是否大于100毫秒
操作步骤:
- 添加线程组
- 添加HTTP请求
- 添加断言持续时间
- 添加查看结果树
小结:
(1)什么时候可以使用断言持续时间?
- 测试HTTP请求的响应时间是否满足要求时,可以使用断言持续时间。
(2)使用”断言持续时间“的操作步骤?
- 添加线程组
- 添加HTTP请求
- 添加断言持续时间
- 填写持续时间(允许的最大响应时间,单位:ms)
- 添加查看结果树
Jmeter关联
关联:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。
Jmeter中常用的关联方法:
- 正则表达式提取器:提取任意格式的响应数据
- Xpath提取器:提取HTML格式的响应数据
- JSON提取器:提取JSON格式的响应数据
正则表达式介绍
正则表达式:就是一个公式,或者说是一套规则,使用这套规则可以从任意字符串中提取出想要的数据内容
格式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
.:是通配符,可以代表任意字符(除换行回车)
*:代表前面的字符出现0次或者多次
.* 匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据
都被记录下来。
?:代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续
查找;再次查找左边界和右边界
公式格式:左边界(.*?)右边界
<title>百度一下,你就知道</title><title>百度一下,你就知道</title>
<title>(.*?)</title>
案例
原始文本:
021-1234-1234
022-1234-1235
023-1234-1236
024-1234-1237
025-1234-1238
026-1234-1239
027-1234-1230
要求:匹配出 城市号、地区号、个人号码三组
正则表达式匹配:
(.*?)-(.*?)-(.*?)\n
结论:
- 通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和右边界即可
- 每一组数据都可以有一个或者多个值
正则表达式提取器
作用:针对任意格式的响应数据进行提取
位置:测试计划–>线程组–>HTTP请求–>(右键添加)后置处理器—>正则表达式提取器
参数介绍:
- 引用名称:存放提取出的值的参数名称,供下一个请求引用,如填写title,则可用${title}引用它。
- 正则表达式:左边界(.*?)右边界
- ():括起来的部分就是要提取的
- .:匹配任何字符串
- *:0次或多次
- ?:不要太贪婪,在找到第一个匹配项后停止。
- 模板:用$ $引用起来,如果在正则表达式中有多个提取值,则可以是 2 2 2 3 3 3等等,表示解析到的第几个值给title。如: 1 1 1表示解析到的第1个值
- 匹配数字:0代表随机取值,-1代表全部取值,1代表取第一个值
- 缺省值:如果参数没有取得到值,那默认一个值让它取。
练习1:
1.请求:http://www.itcast.cn/获取网页的title
2.请求:https://www.baidu.com/ 把获取到title作为请求参数
操作步骤:
- 添加线程组
- 添加HTTP请求- itcast
- 添加正则表达式提取器
- 添加HTTP请求-baidu
- 添加查看结果树
小结:
(1)什么时候可以使用正则表达式提取器?
- 任意格式的响应数据,都可以使用正则表达式提取器进行提取
(2)使用”正则表达式提取器“的操作步骤?
-
添加线程组
-
添加HTTP请求-itcast
-
添加正则表达式提取器
- 引用名称:存放提取出的值的参数名称,如填写title
- 正则表达式:左边界(.*?)右边界
- 模板:用$ $引用起来,表示解析出第几个()的值
- 匹配数字:1代表取第一个值,-1代表全部取值
-
添加HTTP请求-百度
- 引用正则表达式中的引用名称,如:用${title}引用它
-
添加查看结果树
练习2:获取黑马首页的地址(https://www.itheima.com),把第五个校区地址作为参数传递(span为地址的校区)
响应中的地址格式显示:<p><span>地址:</span>湖北省武汉市长江新城区青龙路传智教育科创园</p>
方法1:
- 添加线程组
- 添加HTTP请求-heima
- 添加正则表达式—获取第5个地址
- 添加HTTP请求-百度
- 添加查看结果树
方法2:
-
添加线程组
-
添加HTTP请求-heima
-
添加正则表达式——获取所有匹配的地址数据
-
添加DebugSample
-
添加HTTP请求-百度,引用第5个地址信息,格式:${变量名_索引},索引从1开始
- 添加查看结果树
练习3:获取黑马首页的地址,把第5个校区地址作为参数传递(span为地址/后面带一、二、三)
地址格式1:<p><span>地址一</span>昌平区建材城西路金燕龙办公楼一层</p>
地址格式2:<p><span>地址</span>上海市浦东新区航头镇航都路18号万香创新港</p>
- 添加线程组
- 添加HTTP请求-heima
- 添加正则表达式提取器-地址信息
- 添加HTTP请求-百度
- 添加查看结果树
xpath提取器
作用:针对HTML格式的响应结果进行提取
位置:添加方式:测试计划–>线程组–>HTTP请求–>(右键添加)后置处理器–>xPath提取器
参数:
参数介绍:
- use Tidy(tolernat parser)
- 当需要处理的页面是HTML格式时,必须选中该选项
- 当需要处理的页面是XML和XHTML格式时,取消选中该选项。 - 引用名称:存放提取出的值的参数名称
- Xpath Query:用于提取值的Xpath表达式
- 匹配数字:如果Xpath路径查询出许多结果,则可以选中提取哪个
- 0:表示随机,-1:表示提取所有,1表示第一个值 - 缺省值:参数的默认值
案例:
//a : 找出所有的a标签
//a[@id='kw']: 在HTML页面中,找出a标签(有一个属性为id,且id的值为kw)
//b[@name='kw']: 在HTML页面中,找出b标签(有一个属性为name,且name的值为kw)
案例2:获取itcast中的title标签,
使用://title
练习:
1.请求:http://www.itcast.cn/,获取网页的title值
2.请求:https://www.baidu.com/,把获取到的title作为请求参数
操作步骤:
1.添加线程组
2.添加HTTP请求-itcast
3.添加Xpath提取器
4.添加HTTP请求-百度
5.添加查看结果树
小结
(1)什么时候可以使用XPATH提取器?
- 针对HTML格式的响应数据,可以使用XPATH提取器进行提取
(2)使用"Xpath提取器"的操作步骤?
-
添加线程组
-
添加HTTP请求-itcast
-
添加Xpath提取器
- 勾选use Tidy(tolernat parser)
- 引用名称:存放提取出的值的参数名称。如:填写title
- Xpath Query:用于提取值的Xpath表达式
- 匹配数字:0:表示随机,-1:表示提取所有,1表示第一个值
-
添加HTTP请求-baidu
- 引用正则表达式中的引用名称。如:用${title}引用它。
-
添加查看结果树
JSON提取器
作用:针对JSON格式的响应结果进行数据提取
位置:添加方式:测试计划–>线程组–>HTTP请求–>(右键添加)后置处理器–>JSON提取器
参数:
练习:
1.请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html,获取返回结果中的城市名称”北京“
2.请求https://www.baidu.com/s?wd=北京,把获取到的城市名称作为请求参数
操作步骤:
-
添加线程组
-
添加HTTP请求-天气
- 添加Json提取器
- 添加HTTP请求-百度
- 添加查看结果树
小结
(1)什么时候可以使用JSON提取器?
- 针对JSON格式的响应数据,可以使用JSON提取器进行提取
(2)使用“JSON提取器”的操作步骤?
- 添加线程组
- 添加HTTP请求-天气
- 添加JSON提取器
- Name of created variables:存放提取出的值的参数名称如:city
- JSON Path Expressions:用于提取值的JSON路径表达式
- Match No:0:表示随机,-1:表示提取所有,1表示第一个值
- 添加HTTP请求-百度
- 引用正则表达式中的引用名称。如:用${city}引用它。
- 添加查看结果树
JMeter属性
为什么要使用JMeter属性?
当有关联关系的两个请求在同一个线程组中时,可以使用三种提取器的变量来实现数据传递。
当有关联关系的两个请求在不同线程组时,如何进行数据传递呢?就要用Jmeter属性
Jmeter属性的配置函数
Jmeter属性的函数执行
练习:
1.线程组1:请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html,获取返回结果中的城市名称”北京“
2.线程组2:请求https://www.baidu.com/s?wd=北京,把获取到的城市名称作为请求参数
操作步骤:
- 添加线程组1
- 添加HTTP请求-天气
- 添加JSON提取器
- 添加BeanShell取样器(将JSON提取器的值保存为JMeter属性)
-
添加线程组2
-
添加HTTP请求-百度(读取JMeter属性)
- 添加查看结果树
小结
(1)什么时候需要使用JMeter属性?
- 需要实现跨线程组的数据传递时,可以使用Jmeter属性
(2)使用”Jmeter属性“的操作步骤?
- 添加线程组1
- 添加HTTP请求-天气
- 添加JSON提取器
- 添加BeanShell取样器(将JSON提取器的值保存为JMeter属性)
— 保存Jmeter属性:KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(p_…{city},)}
-
添加线程组2
-
添加HTTP请求-百度(读取JMeter属性)
— 读取Jmeter属性:${__property(p_city,)}
-
添加查看结果树
JMeter录制脚本
Jmeter录制脚本:在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,
帮助编写接口测试脚本。
原理:录制时,Jmeter作为代理服务器来拦截和转发请求与响应数据。
Jmeter录制脚本的操作步骤:
- 添加HTTP代理服务器,并进行配置
- 加HTTP代理服务器:测试计划(右键)-非测试元件-HTTP代理服务器
- 配置代理服务器的参数
- 开启windows 操作系统的浏览器代理
- 启动代理服务器,开始录制
- 在浏览器页面中进行操作,成功后,就能在JMeter当中看到抓取到的接口请求了。
当使用代理的过程中,发现抓不到包,几个可能的情况:
- 过滤规则设置有问题
- 重启Jmeter代理服务器或者重启Jmeter
- 换浏览器来使用(Chrome、IE)
- 检查PC机中的代理设置是否处于可用状态
- 拔掉网线,抓包