浅谈后置处理器之正则表达式提取器

浅谈后置处理器之正则表达式提取器

JMeter是一款功能强大的开源负载测试工具,广泛应用于Web应用、数据库等的性能测试。在进行接口测试或负载测试时,经常需要从服务器响应中提取某些数据作为后续请求的参数。这时,“正则表达式提取器”(Regular Expression Extractor)就发挥了重要作用。本指南将详细介绍如何在JMeter中使用正则表达式提取器来捕获并提取响应数据。

什么是正则表达式提取器?

正则表达式提取器是JMeter的一个后置处理器元件,它能够从 sampler(如HTTP请求)的响应数据中,根据提供的正则表达式查找并提取匹配的文本内容。提取的数据可以存储为变量,供后续的请求或测试逻辑使用。

何时使用正则表达式提取器?

● 动态参数处理:当请求之间存在依赖,且某个参数值需从上一个响应中获取时(如会话Token、动态ID等)。
● 数据验证:验证响应数据中是否包含预期的文本模式。
● 数据提取与分析:从复杂的响应中提取特定信息,用于进一步的处理或测试报告。

如何添加正则表达式提取器?

  1. 在JMeter的工作台或测试计划中,选择一个sampler(如HTTP请求)。
  2. 右键点击该sampler,选择“添加” -> “后置处理器” -> “正则表达式提取器”。

正则表达式提取器配置详解

正则表达式提取器的配置界面包含以下几个关键参数:
● 名称参考:为提取的变量指定一个引用名称。后续可在JMeter中通过${变量名}来引用提取的值。
● 正则表达式:用于匹配响应数据的正则表达式。确保表达式能准确地匹配到你想要提取的内容。
● 模板:定义了如何构建结果变量。最常用的值是 1 1 1,表示使用第一个匹配组的值。如果有多个匹配项,可以使用 2 2 2 3 3 3等。
● 匹配数字:指定使用哪个匹配项。0表示随机,1表示第一个匹配,-1表示所有匹配项。
● 缺省值:如果正则表达式没有匹配到任何内容时,使用的默认值。

应用实例

首先我们使用SpingBoot编写部分测试接口代码

@PostMapping(value = "/login",produces = "application/json;charset=UTF-8")
    public String authenticate(@RequestBody JSONObject request) {

        String validUsername = "admin";
        String validPassword = "password";
        String response = "{\"total\":2,\"data\":[{\"id\":123,\"name\":\"John Doe\",\"email\":\"johndoe@example.com\",\"phone\":\"123-456-7890\",\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"},\"interests\":[\"sports\",\"music\",\"travel\"]},{\"id\":456,\"name\":\"Jane Smith\",\"email\":\"janesmith@example.com\",\"phone\":\"987-654-3210\",\"address\":{\"street\":\"456 Elm St\",\"city\":\"Los Angeles\",\"state\":\"CA\",\"zip\":\"90001\"},\"interests\":[\"reading\",\"cooking\",\"hiking\"]}]}";


        if (request.getString("username").equals(validUsername) && request.getString("password").equals(validPassword)) {
            return response;
        } else {
            return response;
        }
    }

我们编写如下测试脚本
在这里插入图片描述
线程组:保持默认
HTTP信息头管理器:名称content-type,值为application/json;charset=UTF-8
HTTP请求:协议http,服务器名称或IP为127.0.0.1,端口设置为8091,方法为post,路径/login,内容编码为utf-8,消息体数据设置如下

{
    "username": "admin",
    "password": "password"
    }

运行脚本,查看结果树,在HTTP请求的响应数据中Response Body查看结果如下:

{"total":2,"data":[{"id":123,"name":"John Doe","email":"johndoe@example.com","phone":"123-456-7890","address":{"street":"123 Main St","city":"New York","state":"NY","zip":"10001"},"interests":["sports","music","travel"]},{"id":456,"name":"Jane Smith","email":"janesmith@example.com","phone":"987-654-3210","address":{"street":"456 Elm St","city":"Los Angeles","state":"CA","zip":"90001"},"interests":["reading","cooking","hiking"]}]}

正则表达式简单介绍:
● 正则表达式中的( )里面需要写匹配规则,用于提取对应内容。
● 正则表达式中的.?表示匹配任意长度的任意字符,比较常用。
● 在日常工作中,一般使用(.+?)和(.
?)能够满足我们多数测试场景。
详细的正则表达式内容可以查看如下百度百科资料:正则表达式

情况1:获取所有数据

正则表达式设置:
Apply to:Main sample only
要检查的响应字段:主体
引用名称:value
正则表达式:根据结果树中查看返回的信息,我们假设提取"id"😦.*?),“name”:中间ID的数据
模板:为空
匹配数字:设置为-1
缺省值:设置为NotFound
运行脚本,查看结果树中调试取样器的响应数据的Response Body

value=NotFound
value_1=
value_1_g=1
value_1_g0=“id”:123,“name”:
value_1_g1=123
value_2=
value_2_g=1
value_2_g0=“id”:456,“name”:
value_2_g1=456
value_matchNr=2

情况2:随机获取某个数据

正则表达式设置:
Apply to:Main sample only
要检查的响应字段:主体
引用名称:value
正则表达式:根据结果树中查看返回的信息,我们假设提取"id"😦.*?),“name”:中间ID的数据
模板:为空
匹配数字:设置为0
缺省值:设置为NotFound
运行脚本,查看结果树中调试取样器的响应数据的Response Body

value=
value_g=1
value_g0=“id”:123,“name”:
value_g1=123

情况3:随机获取某个数据,并且使用模板/ 0 / 0/ 0/

正则表达式设置:
Apply to:Main sample only
要检查的响应字段:主体
引用名称:value
正则表达式:根据结果树中查看返回的信息,我们假设提取"id"😦.*?),“name”:中间ID的数据
模板:$0$
匹配数字:设置为0
缺省值:设置为NotFound
运行脚本,查看结果树中调试取样器的响应数据的Response Body

value=“id”:456,“name”:
value_g=1
value_g0=“id”:456,“name”:
value_g1=456

此时可以看到,value的值与value_g0相等

情况4:随机获取某个数据,并且使用模板/ 1 / 1/ 1/

正则表达式设置:
Apply to:Main sample only
要检查的响应字段:主体
引用名称:value
正则表达式:根据结果树中查看返回的信息,我们假设提取"id"😦.*?),“name”:中间ID的数据
模板:$1$
匹配数字:设置为0
缺省值:设置为NotFound
运行脚本,查看结果树中调试取样器的响应数据的Response Body

value=456
value_g=1
value_g0=“id”:456,“name”:
value_g1=456

此时可以看到,value的值与value_g1相等

小贴士

● 使用在线正则表达式测试工具预先测试你的正则表达式,确保能正确匹配目标内容。
● 注意正则表达式的贪婪与非贪婪匹配,适当使用?来控制。
● 当提取JSON或XML格式的数据时,考虑使用JSON Extractor或XPath Extractor,这些专门的处理器可能更方便、准确。

总结

通过以上步骤和说明,你应该能够有效地在JMeter测试中利用正则表达式提取器来处理动态数据和提高测试脚本的灵活性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web开发:<br>标签的作用

br作用 介绍基本用法常见用途注意事项使用CSS替代 介绍 在Web开发中&#xff0c;<br> 标签是一个用于插入换行符的HTML标签。它是“break”的缩写&#xff0c;常用于需要在文本中强制换行的地方。<br> 标签是一个空标签&#xff0c;这意味着它没有结束标签。 基本…

HTML+CSS+JS用户管理(可储存用户数据)

使用cookies记录账号密码信息&#xff0c;可以注册、登录、注销账号。 点赞❤️收藏⭐️关注&#x1f60d; 效果图 源代码在效果图后面 源代码 HTML <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <…

无人机图像目标检测

本仓库是人工智能课程的课程作业仓库&#xff0c;主要是完成无人机图像目标检测的任务&#xff0c;我们对visdrone数据集进行了处理&#xff0c;在yolo和ssd两种框架下进行了训练和测试&#xff0c;并编写demo用于实时的无人机图像目标检测。 requirements依赖&#xff1a; ss…

OpenGL笔记一之基础窗体搭建以及事件响应

OpenGL笔记一之基础窗体搭建以及事件响应 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记一之基础窗体搭建以及事件响应1.运行2.目录结构3.main.cpp4.CMakeList.txt 1.运行 2.目录结构 01_GLFW_WINDOW/ ├── CMakeLists.txt ├── glad.c ├── ma…

效能工具:执行 npm start 可直接切换proxy代理UR后直接启动项目

1) 背景: 我们项目是2个前端3个后端的配置。前端和每个后端都有需要调试的接口。 因此经常切换vite.congig.js中的proxy后端代理链接&#xff0c;是挺麻烦的。 于是我研究如何能快速切换后端URL&#xff0c;所幸懒人有懒福&#xff0c;我找到了Inquirer 和 fs&#xff0c; 实…

MySQL NaviCat 安装及配置教程(Windows)【安装】

文章目录 一、 MySQL 下载1. 官网下载2. 其它渠道 二、 MySQL 安装三、 MySQL 验证及配置四、 NaviCat 下载1. 官网下载2. 其它渠道 五、 NaviCat 安装六、 NaviCat 激活 软件 / 环境安装及配置目录 一、 MySQL 下载 1. 官网下载 安装地址&#xff1a;https://www.mysql.com/…

人员定位管理系统有怎样优势?这4点不可忽视

众所周知&#xff0c;人员定位管理系统是通过物联网和云计算等技术&#xff0c;记录所有员工的基本信息&#xff0c;将员工位置、工作情况、运动轨迹等信息上传给系统&#xff0c;全面记录和直观的展现厂区内所有工作人员的具体情况。 除了能够查看人员位置情况外&#xff0c;人…

【C++题解】1168. 歌唱比赛评分

问题&#xff1a;1168. 歌唱比赛评分 类型&#xff1a;数组找数 题目描述&#xff1a; 四&#xff08;1&#xff09; 班要举行一次歌唱比赛&#xff0c;以选拔更好的苗子参加校的歌唱比赛。评分办法如下&#xff1a;设 N 个评委&#xff0c;打 N 个分数&#xff08; 0≤每个分…

分手后失眠之夜:如何安放那颗无处安放的心

在人生的旅途中&#xff0c;我们总会遇到一些人&#xff0c;他们像流星般划过天际&#xff0c;给我们带来瞬间的绚烂&#xff0c;却也留下了长久的寂寥。当感情走到尽头&#xff0c;分手成为无法回避的现实&#xff0c;你是否也曾躺在床上&#xff0c;辗转反侧&#xff0c;难以…

实战篇(九):解锁3D魔方的秘密:用Processing编程实现交互式魔方

解锁3D魔方的秘密:用Processing编程实现交互式魔方 使用 Processing 创建一个 3D 魔方效果展示1. 安装 Processing2. 项目结构3. 代码实现4. 代码解释4.1. 初始化魔方4.2. 绘制魔方4.3. 处理鼠标事件4.4. 检查点击的面4.5. 旋转面和最终确定旋转5. 运行和测试6. 细节解释6.1. …

等级保护测评(三级)主机linux测评指导书

等级保护测评指导书分技术&#xff08;物理安全、主机安全、网络安全、应用安全、数据安全&#xff09; 和管理&#xff08;安全管理制度、安全管理机构、人员安全管理、系统建设管理、系统运维管理&#xff09;两大块。 今天给大家分享一下&#xff0c;等级保护测评&#xff0…

Python数据可视化库之bashplotlib使用详解

概要 在数据分析和科学计算领域,数据可视化是一个不可或缺的环节。传统的图形化数据可视化工具如 Matplotlib、Seaborn 等,虽然功能强大,但有时在命令行环境下使用并不方便。Bashplotlib 是一个轻量级的 Python 库,旨在简化命令行环境下的数据可视化操作。它允许用户在命令…

TS 入门(三):Typescript函数与对象类型

目录 前言回顾1. 函数类型a. 基本函数类型b. 可选参数和默认参数c. 剩余参数 2. 对象类型a. 基本对象类型b. 可选属性和只读属性 3. 类型别名和接口a. 类型别名b. 接口扩展 4. 类型推断和上下文类型a. 类型推断b. 上下文类型 扩展知识点&#xff1a;函数重载结语 前言 在前两章…

Floyd算法——AcWing 343. 排序

目录 Floyd算法 定义 运用情况 注意事项 解题思路 基本步骤 AcWing 343. 排序 题目描述 运行代码 代码思路 改进思路 Floyd算法 定义 Floyd算法&#xff0c;全称Floyd-Warshall算法&#xff0c;是一种用于解决图中所有顶点对之间的最短路径问题的动态规划算法。…

【Memcached】Memcached的工作原理

目录 ​编辑 第2章&#xff1a;Memcached工作原理 2.1 数据存储与访问 2.2 分布式架构 2.3 数据过期机制 第2章&#xff1a;Memcached工作原理 2.1 数据存储与访问 Memcached是一种键值存储系统&#xff0c;其中数据以键值对的形式存储。键是用于定位数据的唯一标识符&am…

13 IP层协议-网际控制报文协议ICMP

计算机网络资料下载&#xff1a;CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140148186 为了更有效的转发IP数据报和提高交付成果的机会&#xff0c;在网际层使用了网际控制报文协议ICMP。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP不是高层协议数…

【系统架构设计师】十一、系统架构设计(层次架构风格|MVC|面向服务的架构风格|ESB)

目录 五、层次架构风格 5.1 两层C/S架构 5.2 三层C/S架构 5.3 三层B/S架构 5.4 MVC架构 5.5 MVP架构 5.6 MVVM架构 六、面向服务的架构风格 6.1 SOA特征 6.2 Web Service 6.2.1 关键技术 6.2.2 WEB Service 6.3 企业服务总线ESB 相关推荐 历年真题练习 五、层次…

[Linux]添加sudoers

之前我们讲过sudo这个命令,它可以让我们普通用户进行短暂的提权,上回我们讲完了vim 本篇是个短篇,目的就是让我们之后的学习中可以使用sudo命令。 首先我们先登录root用户 ls /etc/sudoer 我们需要改的就是上面的这个文件 vim /etc/sudoers 我们用vim打开 把光标移动到这…

类和对象(中)-- 类的六个默认成员函数

目录 1.构造函数 1.1构造函数的特性 1.2 默认构造函数 1.3补丁 ​2.析构函数 2.1析构函数的特性 2.2构造函数与析构函数的调用顺序 3.拷贝构造函数&#xff08;复制构造函数&#xff09; 3.1拷贝构造函数的特征 4.赋值运算符重载 4.1运算符重载 4.2类内重载运算符 …

ChatGPT 深度解析:技术驱动的智能对话

在当今科技飞速发展的时代&#xff0c;ChatGPT 无疑成为了最耀眼的明星之一。它以其令人惊叹的智能对话能力&#xff0c;引发了全球范围内的广泛关注和热议。 ChatGPT 背后的技术堪称精妙绝伦。它基于深度学习算法&#xff0c;通过对海量数据的学习和分析&#xff0c;从而能够理…