Jmeter断言、关联、脚本录制

Jmeter断言

断言:让程序自动判断预期结果和实际结果是否一致

提示:

  • Jmeter在请求的返回层面有个自动判断机制(响应状态码 2xx:成功,4xx/5xx:失败)
  • 但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性。

Jmeter中常用断言

  • 响应断言:对任意格式的响应数据进行断言
  • json断言:对json格式的响应数据进行断言
  • 持续时间断言:对响应时间进行断言

响应断言

作用:对HTTP请求的任意格式的响应结果进行断言

位置:测试计划–>线程组–>HTTP请求–>(右键添加)断言–>响应断言

参数image-20240602125838982

参数配置详细介绍

测试字段:要检查的项(实际结果)

  • 响应文本:来自服务器的响应文本,即主体
  • 响应代码:响应的状态码,例如: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.添加查看结果树

image-20240602143947217

小结

(1)什么时候可以使用响应断言?

  • 任意HTTP请求的响应结果,都可以使用响应断言

(2)使用”响应断言“的操作步骤?

  1. 添加线程组
  2. 添加HTTP请求
  3. 添加响应断言
    • 测试字段:要检查的项(实际结果)
    • 模式匹配规则:比较的方式
    • 测试模式:预期结果
  4. 添加查看结果树

JSON断言

作用:对HTTP请求的JSON格式的响应结果进行断言

位置:测试计划–>线程组–>HTTP请求—>(右键添加)断言—>JSON断言

参数

image-20240602145118361

练习:

请求:http://www.weather.com/data/sk/101010100.html

检查:让程序检查响应的JSON数据中,city对应的内容是否为”北京“

image-20240602145807003

image-20240602145818687

小结

(1)什么时候可以使用JSON断言?

  • 对HTTP请求的响应结果为JSON格式时,可以使用JSON断言

(2)使用"JJSON断言"的操作步骤?

  1. 添加线程组
  2. 添加HTTP请求
  3. 添加JSON断言
    • 填写Assert JSON Path exists(实际结果-json路径)
    • 勾选Addtionally assert value
    • 填写 Expected Value(预期结果)
  4. 添加查看结果树

断言持续时间

作用:检查HTTP请求的响应时间是否超出要求范围

位置:测试计划–>线程组–>HTTP请求—>(右键添加)断言—>断言持续时间

练习:

请求:https://www.jd.com

检查:让程序检查响应时间是否大于100毫秒

操作步骤

  1. 添加线程组
  2. 添加HTTP请求
  3. 添加断言持续时间
  4. 添加查看结果树

image-20240602151002279

小结:

(1)什么时候可以使用断言持续时间?

  • 测试HTTP请求的响应时间是否满足要求时,可以使用断言持续时间。

(2)使用”断言持续时间“的操作步骤?

  1. 添加线程组
  2. 添加HTTP请求
  3. 添加断言持续时间
    • 填写持续时间(允许的最大响应时间,单位:ms)
  4. 添加查看结果树

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

image-20240602155505456

结论:

  • 通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和右边界即可
  • 每一组数据都可以有一个或者多个值

正则表达式提取器

作用:针对任意格式的响应数据进行提取

位置:测试计划–>线程组–>HTTP请求–>(右键添加)后置处理器—>正则表达式提取器

image-20240602155747524

参数介绍

  • 引用名称:存放提取出的值的参数名称,供下一个请求引用,如填写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作为请求参数

操作步骤:

  1. 添加线程组
  2. 添加HTTP请求- itcast
  3. 添加正则表达式提取器
  4. 添加HTTP请求-baidu
  5. 添加查看结果树

image-20240602161937244

image-20240602161950559

image-20240602162008336

image-20240602162125783

小结:

(1)什么时候可以使用正则表达式提取器?

  • 任意格式的响应数据,都可以使用正则表达式提取器进行提取

(2)使用”正则表达式提取器“的操作步骤?

  1. 添加线程组

  2. 添加HTTP请求-itcast

  3. 添加正则表达式提取器

    • 引用名称:存放提取出的值的参数名称,如填写title
    • 正则表达式:左边界(.*?)右边界
    • 模板:用$ $引用起来,表示解析出第几个()的值
    • 匹配数字:1代表取第一个值,-1代表全部取值
  4. 添加HTTP请求-百度

    • 引用正则表达式中的引用名称,如:用${title}引用它
  5. 添加查看结果树

练习2:获取黑马首页的地址(https://www.itheima.com),把第五个校区地址作为参数传递(span为地址的校区)

响应中的地址格式显示:<p><span>地址:</span>湖北省武汉市长江新城区青龙路传智教育科创园</p>

方法1:

  • 添加线程组
  • 添加HTTP请求-heima

image-20240603224718800

  • 添加正则表达式—获取第5个地址

image-20240603225015190

  • 添加HTTP请求-百度

image-20240603225058930

  • 添加查看结果树

image-20240603225416356

方法2

  • 添加线程组

  • 添加HTTP请求-heima

  • 添加正则表达式——获取所有匹配的地址数据

    image-20240603225803692

  • 添加DebugSample

  • 添加HTTP请求-百度,引用第5个地址信息,格式:${变量名_索引},索引从1开始

image-20240603225841416

  • 添加查看结果树

练习3:获取黑马首页的地址,把第5个校区地址作为参数传递(span为地址/后面带一、二、三)

地址格式1:<p><span>地址一</span>昌平区建材城西路金燕龙办公楼一层</p>
地址格式2:<p><span>地址</span>上海市浦东新区航头镇航都路18号万香创新港</p>
  • 添加线程组
  • 添加HTTP请求-heima
  • 添加正则表达式提取器-地址信息

image-20240603230210987

  • 添加HTTP请求-百度

image-20240603230237415

  • 添加查看结果树

xpath提取器

作用:针对HTML格式的响应结果进行提取

位置:添加方式:测试计划–>线程组–>HTTP请求–>(右键添加)后置处理器–>xPath提取器

参数:

image-20240604081725663

参数介绍:

  • 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提取器

image-20240604082535154

4.添加HTTP请求-百度

5.添加查看结果树

小结

(1)什么时候可以使用XPATH提取器?

  • 针对HTML格式的响应数据,可以使用XPATH提取器进行提取

(2)使用"Xpath提取器"的操作步骤?

  1. 添加线程组

  2. 添加HTTP请求-itcast

  3. 添加Xpath提取器

    • 勾选use Tidy(tolernat parser)
    • 引用名称:存放提取出的值的参数名称。如:填写title
    • Xpath Query:用于提取值的Xpath表达式
    • 匹配数字:0:表示随机,-1:表示提取所有,1表示第一个值
  4. 添加HTTP请求-baidu

    • 引用正则表达式中的引用名称。如:用${title}引用它。
  5. 添加查看结果树

JSON提取器

作用:针对JSON格式的响应结果进行数据提取

位置:添加方式:测试计划–>线程组–>HTTP请求–>(右键添加)后置处理器–>JSON提取器

参数:

image-20240604083813341

练习:

1.请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html,获取返回结果中的城市名称”北京“

2.请求https://www.baidu.com/s?wd=北京,把获取到的城市名称作为请求参数

操作步骤:

  1. 添加线程组

  2. 添加HTTP请求-天气

image-20240604084340959

  1. 添加Json提取器

image-20240604084400672

  1. 添加HTTP请求-百度

image-20240604084415922

  1. 添加查看结果树

image-20240604084521105

小结

(1)什么时候可以使用JSON提取器?

  • 针对JSON格式的响应数据,可以使用JSON提取器进行提取

(2)使用“JSON提取器”的操作步骤?

  1. 添加线程组
  2. 添加HTTP请求-天气
  3. 添加JSON提取器
    • Name of created variables:存放提取出的值的参数名称如:city
    • JSON Path Expressions:用于提取值的JSON路径表达式
    • Match No:0:表示随机,-1:表示提取所有,1表示第一个值
    • 添加HTTP请求-百度
      • 引用正则表达式中的引用名称。如:用${city}引用它。
    • 添加查看结果树

JMeter属性

为什么要使用JMeter属性?

当有关联关系的两个请求在同一个线程组中时,可以使用三种提取器的变量来实现数据传递。

当有关联关系的两个请求在不同线程组时,如何进行数据传递呢?就要用Jmeter属性

Jmeter属性的配置函数

image-20240604085941537

Jmeter属性的函数执行

image-20240604090007799

练习:

1.线程组1:请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html,获取返回结果中的城市名称”北京“

2.线程组2:请求https://www.baidu.com/s?wd=北京,把获取到的城市名称作为请求参数

操作步骤:

  1. 添加线程组1
  2. 添加HTTP请求-天气

image-20240604091442149

  1. 添加JSON提取器

image-20240604091509483

  1. 添加BeanShell取样器(将JSON提取器的值保存为JMeter属性)

image-20240604091528811

  1. 添加线程组2

  2. 添加HTTP请求-百度(读取JMeter属性)

image-20240604091555523

  1. 添加查看结果树

image-20240604091621957

小结

(1)什么时候需要使用JMeter属性?

  • 需要实现跨线程组的数据传递时,可以使用Jmeter属性

(2)使用”Jmeter属性“的操作步骤?

  1. 添加线程组1
  2. 添加HTTP请求-天气
  3. 添加JSON提取器
  4. 添加BeanShell取样器(将JSON提取器的值保存为JMeter属性)

​ — 保存Jmeter属性KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(p_…{city},)}

  1. 添加线程组2

  2. 添加HTTP请求-百度(读取JMeter属性)

    ​ — 读取Jmeter属性:${__property(p_city,)}

  3. 添加查看结果树

JMeter录制脚本

Jmeter录制脚本:在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,

帮助编写接口测试脚本。

原理:录制时,Jmeter作为代理服务器来拦截和转发请求与响应数据。

image-20240604214942745

Jmeter录制脚本的操作步骤:

  1. 添加HTTP代理服务器,并进行配置
  • 加HTTP代理服务器:测试计划(右键)-非测试元件-HTTP代理服务器
  • 配置代理服务器的参数

image-20240604220304967

image-20240604220526911

  1. 开启windows 操作系统的浏览器代理

image-20240604220037407

  1. 启动代理服务器,开始录制

image-20240604220353117

  1. 在浏览器页面中进行操作,成功后,就能在JMeter当中看到抓取到的接口请求了。

image-20240604221046349

当使用代理的过程中,发现抓不到包,几个可能的情况

  • 过滤规则设置有问题
  • 重启Jmeter代理服务器或者重启Jmeter
  • 换浏览器来使用(Chrome、IE)
  • 检查PC机中的代理设置是否处于可用状态
  • 拔掉网线,抓包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值