【测试工具JMeter篇】JMeter性能测试入门级教程(八):JMeter参数关联

JMeter参数关联,就是请求或者线程之间通过传递参数建立联系。一般,我们将一个请求的响应参数,作为另一个请求的入参。比如登录后的操作,第一步用来实现登录操作,然后将请求返回的token提取出来保存到某一个变量当中,后续请求作为入参使用。

一、通过正则表达式提取器实现参数关联

jmeter通过正则表达式提取器来实现这一场景。

1.1 正则表达式提取器添加方式

1.2 实现案例

场景:有如下两个接口,通过正则表达式提取器,将第一个接口的城市代码,作为第二个请求的参数传入。

获取城市代码接口:

http://toy1.weather.com.cn/search?cityname=nanjing

根据城市代码获取天气接口:

http://www.weather.com.cn/data/cityinfo/101190101.html

操作步骤

1)建立http请求,获取南京的城市代码,添加察看结果树。

2)运行后,在响应数据中复制目标参数及前后的字符,尽量保证复制的字符串具有唯一性。

3)添加正则表达式提取器,填写提取器相关参数。

4)添加获取城市天气请求,添加察看结果树,使用${citycode}替换101190101。

使用${xx}引用上述正则提取的参数。

5)响应结果如下

提取器参数解释

  • 引用名称:提取的参数名称,自定义,后续请求引用时使用。
  • 正则表达式:获取响应结果的正则公式,常用(.+?)和(.*?),两者结果一致。
  • 具体字符含义如下:

  • 模板:-1全部,0 随机,对应上述正则表达式,若只有一个正则一般就填写1。
  • 匹配数字:匹配结果作为一个数组,匹配数字即可看做是数组的第几个元素。-1表示全部,0随机,其他整数表示对应第几个值。
  • 缺省值:匹配失败时取的默认值。

小技巧

可以在线程组中添加调试取样器,通过取样器获取的请求返回值可以查看所有正则参数的取值。

常见的正则表达式操作符

二、通过JSON提取器实现参数关联

2.1 JSON提取器介绍

相信做过自动化测试的朋友经常会遇到这样的场景:我想调用系统中的某个业务接口,但是需要先登录系统。也就是现在很多接口的访问,都是需要登录接口的token做为基础。

在JMeter中先访问登录接口,使用后置处理器提取出来token或者Cookie的值,然后将该值带到后续的业务接口中,这时就会用到JSON提取器组件。

2.2 为什么要用 JSON 提取器

  • JSON是目前大多数接口响应内容的数据格式。
  • 在接口测试中,不同接口之间可能会有数据依赖,在JMeter中可以通过后置处理器来提取接口的响应内容。
  • JSON 提取器是其中一个可以用来提取响应内容的元件。

2.3 JSON提取器界面详解

添加JSON提取器组件操作:选中“取样器”右键 —> 添加 —> 后置处理器 —> JSON提取器。

界面如下图所示:

在这里插入图片描述

下面是JSON提取器组件的详细说明:

  • 名称:JSON提取器组件的自定义名称,见名知意最好。
  • 注释:即添加一些备注信息,对该JSON提取器组件的简短说明,以便后期回顾时查看。

(1)Apply to:作用范围(返回内容的取值范围)

  • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器。
  • Main sample only:仅作用于父节点的取样器。(选默认的 main sample only 就行了)
  • Sub-samples only:仅作用于子节点的取样器。
  • JMeter Variable Name to use:作用于JMeter变量(输入框内可输入JMeter的变量名称),从指定变量中提取需要的值。

(2)第二部分内容

  • Names of created variables:定义引用提取值的变量名,后面接口中使用${变量名}引用,必填项。
  • JSON Path expression:填写JSON Path表达式,用来提取某个值。必填项。
  • Match No.(0 for Random):表示取值是第几个匹配结果,因为有可能XPath表达式会匹配到多个值。0表示随机,-1表示全部,1代表第一个,2代表第二个,以此类推。(非必填项)
  • Compute concatenation var(suffix_ALL):勾选此项后,如果匹配到多个结果,JMeter会使用,将他们连接起来,存储在的变量中,会自动命名为_ALL。
  • Default Values:缺省值,如果JSON Path表达式匹配不到值的时候,将使用该默认值。(非必填项)

2.4 JSON提取器的使用

需求:用户登录系统,并在系统中查询个人信息。

实现思路:

  • 登陆系统,记录Cookie信息。
  • 提取出用户的ID信息。
  • 保持登陆的状态,根据用户ID,查询用户信息。

(1)测试计划内包含的元件

添加元件操作步骤:

  • 创建测试计划。
  • 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组。
  • 在线程组里面,添加配置原件“HTTP Cookie管理器”组件:选中“线程组”右键 —> 添加 —> 配置元件 —> HTTP
    Cookie管理器。
  • 在线程组下,添加取样器“HTTP请求”组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求。
  • 在取样器下,添加后置处理器“JSON提取器”组件:选中“取样器”右键 —> 添加 —> 后置处理器 —> JSON提取器。
  • 在线程组下,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树。

提示:需要重复添加的组件这里不重复描述。

最终测试计划中的元件如下:

在这里插入图片描述

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

(2)HTTP Cookie管理器内容

什么都不用填写,保持原样即可。

在这里插入图片描述

简单说明一下:

  • JMeter中自动收集的Cookie,是不会在HTTP Cookie管理器中进行展示的,但是运行后通过查看结果树可以查看到Cookie信息,接受到的Cookie会被自动存储在线程变量中。(使用Debug Sampler组件查看)
  • HTTP Cookie管理器会自动记录每一个请求所产生的Cookie,在后边对同源站点进行的请求中,都可以自动的使用对应Cookie进行发送。

(3)用户登陆请求界面内容

发送一个标准POST请求,参数格式为JSON,这里就不做解释了。

界面内容如下图所示:

在这里插入图片描述

(4)JSON提取器界面内容

我们在编辑JSON提取器组件之前,一般先请求一下需要提取返回数据的接口。

因为我们需要先查看一下需要提取的数据在什么位置,同时我们也能够提前编写一下JSON Path表达式。

如下图所示:

在这里插入图片描述

然后选择JSON Path Tester视图模式,先手动编写JSON Path表达式,看看是否能够取到需要的数据。

如下图所示:

在这里插入图片描述

之后我们就可以编写JSON提取器组件界面了,如下:

编写引用名称、JSON表达式、匹配数据选择,如下图:

在这里插入图片描述

提示:如果要获取多个元素,则可以在HTTP请求组件中,加入多个后置处理器来提取需要的值。即:每一个后置处理器只能获取一个值。

JSON提取器组件提取出来的数据,会存储在线程变量中,供其他后续接口使用。

(5)查看用户信息请求页面内容

填写接口的基本请求信息,然后把JSON提取器提取出来的数据,作为参数化变量应用到请求中。

如下图所示:

在这里插入图片描述

(6)查看结果

我们可以看到在第二个请求中,拿到了第一个请求提取出来的用户ID数据。

如下图所示:

在这里插入图片描述

再来看看第二个请求响应的结果,可以看到对应用户的信息我们已经查询到了。

在这里插入图片描述

提示:可以添加Debug PostProcessor(调试后置处理器),或者Debug Sampler(调试取样器),来查看JSON提取器中,提取出的内容是否正确。

注意:正常跑用例时删除或禁用它们。

2.5 JSON Path表达式说明

JSON提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值为一个List,则使用.key[n],其中n为list中元素的编号。

在这里插入图片描述


常用JSON Path表达式使用实例,如下:

1、获取第一层中的某个属性的值:$.key。

2、获取List中某个key的value值:$.result[0].name。

3、获取列表中的某个列表的属性值:$.result[1].approver[0]。

4、获取一个列表下全部的某一个元素:$.result[*].name。

5、获取N个值:

  • 取前两条数据:$.result.records[2].id。
  • 取后两条数据:$.result.records[-2].id。

6、提取特定条件的某个值:$.result.records[?(@.object_id==0)].id。

7、获取固定条件下的多个key的value值:$.result.records[?(@.object_id==0)].[“id”,“name”,“is_active”]。

三、通过Xpath提取器实现参数关联

1.1 XPath Extractor介绍

XPath Extractor的使用方法与正则表达式提取器(Regular Expression Extractor)类似,只不过该Expression中指定的不是正则表达式,而是给定的XPath路径。

后置处理器(Post Processor)本质上是一种对sampler发出请求后接受到的响应数据进行处理(后处理)的方法。必须将后置处理器元件放在合适的位置才能达到预期的效果。

1.2 XPath提取器界面详解

新建一个线程组,然后右键-添加-后置处理器-XPath Extractor:


(1)Apply to:作用范围(返回内容的取值范围)

  • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
  • Main sample only:仅作用于父节点的取样器
  • Sub-samples only:仅作用于子节点的取样器
  • JMeter Variable Name to use:作用于jmeter变量(输入框内可输入jmeter的变量名称)

(2)XML Parsing Options:要解析的XML参数

  • Use Tidy(tolerant parser):当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式(例如RSS返回),则取消选中;
  • Quiet表示只显示需要的HTML页面
  • Report errors表示显示响应报错
  • Show warnings表示显示警告;
  • Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨;
  • Validate XML:根据页面元素模式进行检查解析;
  • Ignore Whitespace:忽略空白内容;
  • Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容;

(3)Return entire XPath fragment of text content:返回文本内容的整个XPath片段

(4)Reference Name:存放提取出的值的参数。

(5)XPath Query:用于提取值的XPath表达式。

(6)Default Value:参数的默认值。

1.3 正则表达式提取器和XPath Extractor的区别

①正则表达式提取器可以用于对页面任何文本的提取,提取的内容是根据正则表达式在页面内容中进行文本匹配;

②XPath Extractor则可以提取返回页面任意元素的任意属性;

③如果需要提取的文本是页面上某元素的属性值,建议使用XPath Extractor;

④如果需要提取的文本在页面上的位置不固定,或者不是元素的属性,建议使用正则表达式提取器。

1.4 示例实战

1)场景:

访问网易官网,获取title值。

将title值放入百度搜索框,进行搜索。

2)添加元件操作

最终测试计划添加完元件后界面如下:

3)具体元件配置

非常简单的http请求配置,界面内容如下图所示:

  • 网易首页请求设置

  • Xpath提取器配置

我们在编辑Xpath提取器组件前,一般先运行上一个请求需要提取返回数据的接口。

因为我们需要先查看一下需要提取的数据在什么位置,如下图所示:

然后选择Xpath Tester视图模式,先手动编写Xpath表达式,看看是否能够取到需要的数据。如下图所示:

  • 百度搜索页面设置如下

4)运行结果

我们可以看到第二个请求中,拿到了第一个请求提取出来的数据“网易”。如下图所示:

再来看看第二个请求响应的结果,可以看到有“网易_百度搜索”的title属性,说明在百度已经进行了网易搜索。如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/34561.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

运算符重载(五)

目录 const成员函数const对象不可以调用非const成员函数非const对象可以调用const成员函数const成员函数内不可以调用其它的非const成员函数非const成员函数内可以调用其它的const成员函 取地址及const取地址操作符重载const补充场景1场景2场景3场景4 const成员函数 将const修…

论文阅读笔记:Adaptive Rotated Convolution for Rotated Object Detection

论文阅读笔记:Adaptive Rotated Convolution for Rotated Object Detection 1 背景1.1 问题1.2 提出的方法 2 创新点3 方法4 模块4.1 旋转卷积核4.2 路由函数4.3 自适应旋转卷积模块 5 效果5.1 与SOTA方法对比5.2 消融实验 论文:https://arxiv.org/pdf/2…

OPenCV 图片局部放大

m_image cv::imread("C:/Code/JPG/1.jpg");if (m_image.empty()) return;cv::imshow("原始图像", m_image); // TODO: 在此添加控件通知处理程序代码int width m_image.cols;int height m_image.rows;// 确定要放大的区域(这里是图像中心部分…

SpringBoot项目启动报错-Slf4j日志相关类找不到

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

剧本杀门店预约系统开发,助力门店业务升级

剧本杀门店系统是一个统一管理门店的应用程序,能够让消费者通过系统与好友组局预订剧本杀游戏,节省到线下门店排队预约的时间,提高玩家的游戏体验感。同时商家也可以借助小程序高效管理、运营门店,提高门店的整体服务质量。 小程…

c语言指针练习

1.已知数组a[10]和b[10]中元素的值递增有序&#xff0c;用指针实现将两个数组中的元素按递增的顺序输出。 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {int a[10]{1,3,5,7,9,11,13,15,17,19};int…

MYSQL中的增删改查操作(如果想知道MYSQL中有关增删改查操作的知识,那么只看这一篇就足够了!)

前言&#xff1a;在 MySQL 中&#xff0c;增、删、改、查&#xff08;CRUD&#xff09;操作是基本的数据库操作&#xff0c;增操作&#xff08;INSERT&#xff09;用于插入数据&#xff0c;删操作&#xff08;DELETE&#xff09;用于删除数据&#xff0c;改操作&#xff08;UPD…

代码随想录-算法训练营day36(贪心算法06:单调递增的数字,监控二叉树,总结)

第八章 贪心算法 part06● 738.单调递增的数字 ● 968.监控二叉树 ● 总结 详细布置 738.单调递增的数字 https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 968.监控二叉树 &#xff08;可以跳过&#xff09;本题是…

NeurIPS Spotlight|从分类到生成:无训练的可控扩散生成

近年来&#xff0c;扩散模型&#xff08;Diffusion Models&#xff09;已成为生成模型领域的研究前沿&#xff0c;它们在图像生成、视频生成、分子设计、音频生成等众多领域展现出强大的能力。然而&#xff0c;生成符合特定条件&#xff08;如标签、属性或能量分布&#xff09;…

Neo4j:图数据库使用入门

文章目录 一、Neo4j安装1、windows安装&#xff08;1&#xff09;准备环境&#xff08;2&#xff09;下载&#xff08;3&#xff09;解压&#xff08;4&#xff09;运行&#xff08;5&#xff09;基本使用 2、docker安装 二、CQL语句1、CQL简介2、CREATE 命令&#xff0c;创建节…

声音克隆GPT-SoVITS

作者&#xff1a;吴业亮 博客&#xff1a;wuyeliang.blog.csdn.net 一、原理介绍 GPT-SoVITS&#xff0c;作为一款结合了GPT&#xff08;生成预训练模型&#xff09;和SoVITS&#xff08;基于变分信息瓶颈技术的歌声转换&#xff09;的创新工具&#xff0c;正在声音克隆领域掀…

嵌入式Linux,标准I/O探究,函数相关详解。

标准 I/O 虽然是对文 件 I/O 进行了封装&#xff0c;但事实上并不仅仅只是如此&#xff0c;标准 I/O 会处理很多细节&#xff0c;譬如分配 stdio 缓冲区、以优化的块长度执行 I/O 等。 1.标准 I/O 库介绍 通常标准 I/O 库函数相关的函数定义都在头文件 <stdio.h&g…

github使用SSH进行克隆仓库

SSH 密钥拉取git 查询密钥是否存在 s -al ~/.ssh这个文件夹下 known_hosts 就是存在的密钥文件 创建密钥文件 ssh-keygen -t rsa -b 4096 -C "testtt.com"-t rsa 是 rsa 算法加密 -b 是指定密钥的长度&#xff08;以位为单位&#xff09;。 -C 是用于给密钥添加注…

江铃集团新能源携四款车型亮相香港车展,国际化布局成果显著

12月5日&#xff0c;2024年香港国际汽车博览会&#xff08;香港车展&#xff09;盛大开幕&#xff0c;来自全球上百个品牌齐聚一堂&#xff0c;上演了一场汽车盛筵。江铃集团新能源作为自主品牌的代表车企之一&#xff0c;持续推进国际化布局&#xff0c;为了满足不同地区用户的…

使用Unity脚本模拟绳索、布料(碰撞)

效果演示&#xff1a; 脚本如下&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;namespace PhysicsLab {public class RopeSolver : MonoBehaviour {public Transform ParticlePrefab;public int Count 3;public int Space 1;…

大数据-242 离线数仓 - 电商核心交易 数据导入 全量数据导入方案 产品分类、商家店铺、地域组织

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

【NLP 5、深度学习的基本原理】

目录 一、梯度下降算法 1.引例 —— 找极小值问题 目标&#xff1a; 方法&#xff1a; 2.梯度 例&#xff1a; 3.求解目标 为什么损失函数越小越好 4.梯度下降法 代码实现 5.细节问题 6.梯度爆炸和梯度消失 梯度爆炸 梯度消失 7.过拟合和欠拟合 欠拟合&#xff08;Underfitting…

云计算对定制软件开发的影响

在当代数字世界中&#xff0c;云计算是改变许多行业&#xff08;包括定制软件开发&#xff09;的最伟大的革命性趋势之一。由于这些公司努力寻求更好、更多不同的方式来履行职责&#xff0c;因此云计算与传统的内部部署基础设施相比具有许多不可否认的优势。这种范式转变对定制…

智能交通(8)——腾讯开悟智能交通信号灯调度赛道

本文档用于记录参加腾讯开悟智能信号灯调度赛道的模型优化过程。官方提供了dqn和target_dqn算法&#xff0c;模型的优化在官方提供的代码基础上进行。最终排名是在榜单16&#xff0c;没能进入最后的决赛。 一.赛题介绍 赛题简介&#xff1a;在本地赛题中&#xff0c;参赛团队…

RK3568平台开发系列讲解(IIO篇)IIO缓冲区

🚀返回专栏总目录 文章目录 一、IIO缓冲区的sysfs接口二、IIO缓冲区设置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢IIO缓冲区提供连续的数据捕获,一次可以同时读取多个数据通道。可通过dev/iio:device字符设备节点从用户空间访问缓冲区。在触发器处理程序中,用…