当前位置: 首页 > news >正文

Jmeter性能测试之正则表达式提取器

目录

前言

1. Jmeter正则表达式提取器

2. 入门实例

3. 进阶实例


前言

Jmeter正则表达式提取器属于Jmeter后置处理器(post processors)的一种,用于将取样器请求到的结果以正则表达式的方式读取出来。

1. Jmeter正则表达式提取器

1. 作用

JSON提取器只能提取响应内容,而正则表达式提取器可以提取响应头、请求头的值,当然也可以提取响应内容。

在这里插入图片描述

 2. 参数详解

在这里插入图片描述

  • Apply to:应用范围,选默认的main sample only就行了
  • 要检查的响应字段:要提取的字段范围
  1. 主体:响应体,不包含响应头;最常用
  2. body(unescaped):响应体,替换了所有HTML转义符;不建议使用
  3. body as a Document:从不同类型的文件中提取文本;影响性能
  4. 信息头:响应头
  5. Requeste Headers:请求头
  6. URL:URL
  7. 响应代码:响应码(Response code)
  8. 响应信息:响应信息(Response message)
  • 引用名称:接收提取值的变量名,*必传
  • 正则表达式:正则表达式
  • 模板:从找到的匹配项中创建字符串的模板
  1. 如果一条正则表达式有多个提取结果,则提取结果是数组形式
  2. 模板1、2…表示把解析到的第几个值赋值给变量,从1开始匹配
  3. 0表示整个表达式匹配的内容
  4. 若只有一个结果,只能是1
  • 匹配数字(0代表随机):取第几个值(0:随机,默认;-1所有;1第一个值),非必传
  • 缺省值:缺省值,匹配不到值的时候取该值,非必传
  • Use empty default value:勾选后,提取不到值时,则返回空字符串

Name of created variable(将通过正则表达式截取到的值,存到变量中,指定该变量的名称)
当使用正则表达式从一个请求返回信息中,截取多个字段时,此处也可只填写一个变量,如下图所示。

在这里插入图片描述此时,截取到的多个值将会以变量名_g1、变量名_g2来使用,详见下图,这是自己专门实验的截图。

在这里插入图片描述

  • 变量=截取的全部字段,彼此字段间以空格相隔,如上图第一行。
  • 变量_g:应代表截取的变量个数?
  • 变量_g0: 根据正则表达式匹配到的(截取前的)完整字段。
  • 变量_g1:截取到的第一个字段,使用时${变量名_g1}。
  • 变量_g2:截取到的第二个字段,使用时${变量名_g2},如下图所示。

在这里插入图片描述

 Regular Expression(正则表达式)

可百度在线正则表达式来练习正则表达式,此处先给出一个在线正则网址。

Template($1$表示会拿到第一个正则表达式匹配到的数据,待确认)
自己的理解,模板Template的含义是提取结果的返回格式模板(当你在Regular Expression(正则表达式)处设置多个提取点时,例如"errmsg":"(.*)","access_token":"(.+?)",那么提取的多个值将以模板Template设置的格式来返回给用户)。

目前自己从其他网商博客了解的信息是,如果在提取器的正则表达式处填写了多个提取点(例如,"errmsg":"(.*)","access_token":"(.+?)"。这对于Jmeter来说,会将此表达式当作两个正则表达式来处理——"errmsg":"(.*)","access_token":和,"access_token":"(.+?)",则可以在Template处填写$1$、$2$等等。$1$代表第一个正则表达式"errmsg":"(.*)","access_token":的截取结果,$2$代表第二个正则表达式,"access_token":"(.+?)"的截取结果,依次类推(注:如果在Template处填写的$1$和$2$间有空格,提取出的(.*)和(.+?)也会以对应空格间隔)。

$0$指全文匹配,$1$ $2$指同时获取第一个和第二个提取点。

Match No.(第几个匹配成功的)
Default Value(当未匹配到时,使用此值返回)

参数不好理解,下面来举例子啦~

3. 正则表达式提取器实栗

还是以这个地址的接口来测试哦

YesApi 小白免费接口 | 果创云,一个账号,搞定接口开发

2. 入门实例

在这里插入图片描述

会员登录接口的响应内容:

{"ret": 200,"data": {"err_code": 0,"err_msg": "","uuid": "F118DD335346CE9D7094C97190587108","token": "C1CA708E57F0C33E548745B0D82ADA2A800D886D17BA44261459C39C52376C0D","role": "user"},"msg": "V3.3.0 YesApi App.User.Login 2022-03-20 10:25:40 hd215"
}

正则表达式提取器-提取token:

在这里插入图片描述

 正则表达式提取器-提取uuid:

在这里插入图片描述

  1. 正则表达式-----( )里面写匹配规则,用于解析正则表达式
  2. 正则表达式-----.*?表示匹配任意长度的任意字符,这也是最常用的正则表达式
  3. 一般(.+?)和(.*?)能够满足我们80%的使用场景

其他接口调用正则表达式提取的变量:

在这里插入图片描述

3. 进阶实例

测试接口:http://api.yesapi.cn/docs-api-App.User.GetList.html

响应内容:

{"ret":200,"data":{"err_code":0,"err_msg":"","users":[{"uuid":"F118DD335346CE9D7094C97190587108","username":"xey032001","role":"user","role_desc":"普通会员","status":0,"status_desc":"正常","reg_time":"2022-03-20 10:25:40","ext_info":{"yesapi_avatar":"","yesapi_nickname":"","yesapi_email":"","yesapi_sex":"","yesapi_real_name":"","yesapi_points":0,"yesapi_reg_source":"","yesapi_reg_note":"","yesapi_mobile":"","yesapi_expiration_time":""}},{"uuid":"AAC71046CFA51B8A55D4367652791D66","username":"xey04","role":"user","role_desc":"普通会员","status":0,"status_desc":"正常","reg_time":"2022-03-19 13:22:24","ext_info":{"yesapi_avatar":"","yesapi_nickname":"","yesapi_email":"","yesapi_sex":"","yesapi_real_name":"","yesapi_points":0,"yesapi_reg_source":"","yesapi_reg_note":"","yesapi_mobile":"","yesapi_expiration_time":""}},{"uuid":"97F22D1CD99D17C2CF29510C728F6570","username":"xey03","role":"user","role_desc":"普通会员","status":0,"status_desc":"正常","reg_time":"2022-03-19 13:18:56","ext_info":{"yesapi_avatar":"","yesapi_nickname":"","yesapi_email":"","yesapi_sex":"","yesapi_real_name":"","yesapi_points":0,"yesapi_reg_source":"","yesapi_reg_note":"","yesapi_mobile":"","yesapi_expiration_time":""}},{"uuid":"770A6910AF264AEB73F6ECAFEB5BBFB6","username":"xey02","role":"user","role_desc":"普通会员","status":0,"status_desc":"正常","reg_time":"2022-03-19 13:15:35","ext_info":{"yesapi_avatar":"","yesapi_nickname":"","yesapi_email":"","yesapi_sex":"","yesapi_real_name":"","yesapi_points":0,"yesapi_reg_source":"","yesapi_reg_note":"","yesapi_mobile":"","yesapi_expiration_time":""}},{"uuid":"690815A62298F01009010BA062773A9F","username":"xey01","role":"user","role_desc":"普通会员","status":0,"status_desc":"正常","reg_time":"2022-03-19 13:14:03","ext_info":{"yesapi_avatar":"","yesapi_nickname":"","yesapi_email":"","yesapi_sex":"","yesapi_real_name":"","yesapi_points":0,"yesapi_reg_source":"","yesapi_reg_note":"","yesapi_mobile":"","yesapi_expiration_time":""}},{"uuid":"24249E71ABBD72D7C1DE8B3E95A0FBBE","username":"xey","role":"user","role_desc":"普通会员","status":0,"status_desc":"正常","reg_time":"2022-03-19 13:08:25","ext_info":{"yesapi_avatar":"","yesapi_nickname":"","yesapi_email":"","yesapi_sex":"","yesapi_real_name":"","yesapi_points":0,"yesapi_reg_source":"","yesapi_reg_note":"","yesapi_mobile":"","yesapi_expiration_time":""}}],"total":6},"msg":"V3.3.0 YesApi App.User.GetList 2022-03-20 11:16:58 hd215"
}

1)提取一个值:

正则表达式中只提取一个值,且匹配数字不是-1

1. 未填写模板

在这里插入图片描述

PS:匹配数字填1,表示如果有多个uuid,则匹配到第一个,这里与JSON提取器相同

测试结果:

uuid=
uuid_g=1
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g1=F118DD335346CE9D7094C97190587108

可以看到,如果正则匹配到值,但是没有填写模板,则返回空

2. 模板写$0$

在这里插入图片描述

测试结果:

uuid="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g=1
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g1=F118DD335346CE9D7094C97190587108

可以看到,如果模板填写的$0$,uuid取的是uuid_g0

3. 模板写$1$

测试结果:

uuid=F118DD335346CE9D7094C97190587108
uuid_g=1
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g1=F118DD335346CE9D7094C97190587108

可以看到,如果模板写$1$,uuid取的是uuid_g1

4. 模板写$2$(不存在)

测试结果:

uuid=null
uuid_g=1
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g1=F118DD335346CE9D7094C97190587108

可以看到,如果模板不存在,uuid为null(即使勾选了使用空默认值,也返回null)

2)提取多个值:

在这里插入图片描述

测试结果:

uuid_1=F118DD335346CE9D7094C97190587108
uuid_1_g=1
uuid_1_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_1_g1=F118DD335346CE9D7094C97190587108
uuid_2=AAC71046CFA51B8A55D4367652791D66
uuid_2_g=1
uuid_2_g0="uuid":"AAC71046CFA51B8A55D4367652791D66"
uuid_2_g1=AAC71046CFA51B8A55D4367652791D66
uuid_3=97F22D1CD99D17C2CF29510C728F6570
uuid_3_g=1
uuid_3_g0="uuid":"97F22D1CD99D17C2CF29510C728F6570"
uuid_3_g1=97F22D1CD99D17C2CF29510C728F6570
uuid_4=770A6910AF264AEB73F6ECAFEB5BBFB6
uuid_4_g=1
uuid_4_g0="uuid":"770A6910AF264AEB73F6ECAFEB5BBFB6"
uuid_4_g1=770A6910AF264AEB73F6ECAFEB5BBFB6
uuid_5=690815A62298F01009010BA062773A9F
uuid_5_g=1
uuid_5_g0="uuid":"690815A62298F01009010BA062773A9F"
uuid_5_g1=690815A62298F01009010BA062773A9F
uuid_6=24249E71ABBD72D7C1DE8B3E95A0FBBE
uuid_6_g=1
uuid_6_g0="uuid":"24249E71ABBD72D7C1DE8B3E95A0FBBE"
uuid_6_g1=24249E71ABBD72D7C1DE8B3E95A0FBBE
uuid_matchNr=6

一个正则表达式有多个( ):

1. 模板为空:

在这里插入图片描述

测试结果:

uuid=
uuid_g=2
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108","username":"xey032001"uuid_g1=F118DD335346CE9D7094C97190587108
uuid_g2=xey032001

可以看到,如果模板为空,取不到值,uuid为空

2. 只有一个模板:

在这里插入图片描述

测试结果:

uuid=F118DD335346CE9D7094C97190587108
uuid_g=2
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108",
"username":"xey032001"uuid_g1=F118DD335346CE9D7094C97190587108
uuid_g2=xey032001

可以看到,如果只有一个模板,取到了uuid_g1

3. 有两个模板:

在这里插入图片描述

测试结果:

uuid=F118DD335346CE9D7094C971q90587108,
xey032001
uuid_g=2
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108",
"username":"xey032001"uuid_g1=F118DD335346CE9D7094C97190587108
uuid_g2=xey032001

可以看到,uuid取到了两个值uuid_g1和uuid_g2,并且用逗号拼接

注意:

  • 引用名称、匹配数字、缺省值只需要填一个即可,不需要跟正则表达式的数量一致
  • 也可以用. - 拼接,只要模板也用. 或- 拼接即可,如模板填:1-2q

参考文章:

Jmeter正则表达式提取器_jmeter的正则表达式提取器_龙俊亨的博客-CSDN博客

Jmeter基础入门教程【11】--常用功能详解:正则提取器_jmeter正则提取器_短尾巴小鳄鱼的博客-CSDN博客

相关文章:

Jmeter性能测试之正则表达式提取器

目录 前言 1. Jmeter正则表达式提取器 2. 入门实例 3. 进阶实例 前言 Jmeter正则表达式提取器属于Jmeter后置处理器(post processors)的一种,用于将取样器请求到的结果以正则表达式的方式读取出来。 1. Jmeter正则表达式提取器 1. 作用…...

浅谈Kubernetes中Service网络实现(服务发现)

目录 CoreDNS(Kube-DNS) Kube-proxy kube-proxy的三种实现模式 iptables模式 IPVS模式 之前的文章介绍了Kubernetes中基于service实现了集群内部的网络通信,这篇文章详细聊一下Kubernetes中的Service网络本身又是如何实现的。...

【重造轮子】golang实现可重入锁

造个可重入锁的轮子 介绍目标 正文sync.Mutexsync.Mutex介绍多协程计数器demo多协程计数器加锁 源码剖析Mutex数据结构Lock()加锁核心逻辑 UnLock() 重入锁与可重入锁魔改 sync.Mutex 参考文档 介绍 开新坑啦!! 从这篇文章开始,尝试造轮子&a…...

torch显存分析——对生成模型清除显存

torch显存分析——对生成模型清除显存 1. 问题介绍2. 应对方法 1. 问题介绍 本文主要针对生成场景下,如何方便快捷地清除当前进程占用的显存。文章的重点不止是对显存的管理,还包括怎样灵活的使用自定义组件来控制生成过程。 在之前的文章torch显存分析…...

electron+vue+ts窗口间通信

文章目录 一. 目的二.逻辑分析三. 代码示例 "types/node": "^20.3.1","vitejs/plugin-vue": "^4.1.0","vueuse/electron": "^10.2.1","electron": "^25.2.0","electron-packager":…...

基于Fringe-Projection环形投影技术的人脸三维形状提取算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .................................................................... figure; imshow(Im…...

如何使用Webman框架实现多语言支持和国际化功能?

如何使用Webman框架实现多语言支持和国际化功能? Webman是一款轻量级的PHP框架,提供了丰富的功能和扩展性,使得开发人员能够更加高效地开发Web应用程序。其中,多语言支持和国际化功能是Web应用程序中非常重要的一项功能&#xff…...

接受平庸,特别是程序员

目录 方向一:简述自己的感受 方向二:聊聊你想怎么做 方向三:如何调整自己的心态 虽然清楚知识需要靠时间沉淀,但在看到自己做不出来的题别人会做,自己写不出的代码别人会写时还是会感到焦虑怎么办? 你是…...

HTML兼容性

文章目录 一、兼容性二、兼容问题1. 在IE6下,子级的宽度会撑开父级设置好的宽度2. IE6中,元素浮动,如果宽度需要内容撑开,需要给里面的块元素都添加浮动才可以3. 在IE6、7下,元素要通过浮动排在同一排,就需…...

Java日期和时间处理入门指南

文章目录 1. 日期操作 - java.util.Date1.1 构造方法1.2 常用方法 2. 日期格式化 - java.text.SimpleDateFormat2.1 获取对象2.2 方法 3. 获取时间分量 - java.util.Calendar3.1 时间分量3.2 创建对象3.3 常用的时间分量3.4 获取时间分量3.5 设置时间分量 结语 引言&#xff1a…...

anndata k折交叉

如何将anndata拆分为k份 import scanpy as sc import anndata as adclass KSplitAnndata:staticmethoddef _base_split(data: object, k: int) -> list:adata data.copy()num adata.n_obs // kadata_list []for i in range(k):if num < adata.n_obs:adata_list.appen…...

深入解析项目管理中的用户流程图

介绍用户流程图 用户流程图的定义 用户流程图(User Flow Diagram)是一种可视化工具&#xff0c;它描绘了用户在应用或网站上完成任务的过程。这些任务可以是购物、注册账户、查找信息等&#xff0c;任何需要用户交互的动作都可以在用户流程图中找到。 用户流程图的重要性 用…...

Vue使用QrcodeVue生成二维码并下载

生成二维码 1、安装qrcode.vue组件 npm install --save qrcode.vue<template><div id"app"><qrcode-vue :valuevalue :sizesize></qrcode-vue><br /></div> </template><script> //导入组件 import QrcodeVue fro…...

“用户登录”测试用例总结

前言&#xff1a;作为测试工程师&#xff0c;你的目标是要保证系统在各种应用场景下的功能是符合设计要求的&#xff0c;所以你需要考虑的测试用例就需要更多、更全面。鉴于面试中经常会问“”如何测试用户登录“”&#xff0c;我们利用等价类划分、边界值分析等设计一些测试用…...

适应于Linux系统的三种安装包格式 .tar.gz、.deb、rpm

deb、rpm、tar.gz三种Linux软件包的区别 rpm包-在红帽LINUX、SUSE、Fedora可以直接进行安装&#xff0c;但在Ubuntu中却无法识别&#xff1b; deb包-是Ubuntu的专利&#xff0c;在Ubuntu中双击deb包就可以进入自动安装进程&#xff1b; tar.gz包-在所有的Linux版本中都能使用…...

Linux lvs负载均衡

LVS 介绍&#xff1a; Linux Virtual Server&#xff08;LVS&#xff09;是一个基于Linux内核的开源软件项目&#xff0c;用于构建高性能、高可用性的服务器群集。LVS通过将客户端请求分发到一组后端服务器上的不同节点来实现负载均衡&#xff0c;从而提高系统的可扩展性和可…...

Tomcat 创建https

打开CMD,按下列输入 keytool -genkeypair -alias www.bo.org -keyalg RSA -keystore d:\ambition.keystore -storetype pkcs12 输入密钥库口令:123456 再次输入新口令:123456 您的名字与姓氏是什么? [Unknown]: www.ambition.com 您的组织单位名称是什么? [Unknown…...

超导电性的基本现象和相关理论

超导体 Hg 超导电性的基本现象和相关理论 超导体的基本特性 低温零电阻突变&#xff08;< 10^{-23 \Omega/m}&#xff09; 良导体在 10^{-10} \Omega/m临界温度迈斯纳效应 完全排磁通效应&#xff08;完全抗磁性&#xff09; 超导体物体内部不存在电场 第一类超导体与第二类…...

在 PHP 中单引号(‘ ‘)和双引号(“ “)用法的区别

在 PHP 中&#xff0c;使用单引号&#xff08; &#xff09;和双引号&#xff08;" "&#xff09;可以创建字符串。这两种引号的用法有一些区别。 单引号&#xff1a; 单引号用于创建简单的字符串&#xff0c;其中的变量和转义字符将不会被解析。单引号中的任何内容…...

SpringCloudAlibaba:服务网关之Gateway的cors跨域问题

目录 一&#xff1a;解决问题 二&#xff1a;什么是跨域 三&#xff1a;cors跨域是什么&#xff1f; 一&#xff1a;解决问题 遇到错误&#xff1a; 前端请求时报错 解决&#xff1a; 网关中添加配置文件&#xff0c;注意springboot版本&#xff0c;添加配置。 springboo…...

如何用deberta-v3-base-zeroshot-v2.0构建企业级NLP应用?完整教程来了

如何用deberta-v3-base-zeroshot-v2.0构建企业级NLP应用&#xff1f;完整教程来了 【免费下载链接】deberta-v3-base-zeroshot-v2.0 项目地址: https://ai.gitcode.com/hf_mirrors/NingBo_Ascend/deberta-v3-base-zeroshot-v2.0 deberta-v3-base-zeroshot-v2.0是一款基…...

别再只测accuracy!DeepSeek集成测试必须监控的5个隐性指标(P99首token延迟、context bleed率、tool-call schema漂移)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek集成测试的核心范式演进 DeepSeek大模型的工程化落地对集成测试提出了全新挑战&#xff1a;传统基于接口响应码与字段校验的测试范式已难以覆盖语义一致性、推理链鲁棒性、上下文敏感度等高阶质…...

GitLab External Wiki代理权限绕过漏洞深度解析

1. 这个漏洞不是“修个补丁”就能完事的——它暴露的是 GitLab 权限模型里一个被长期忽视的逻辑断层GitLab 安全漏洞 CVE-2025-2614&#xff0c;光看编号容易误以为是又一个常规的越权或 XSS 类型漏洞。但我在实际复现和审计过程中发现&#xff0c;它根本不是配置疏漏或代码拼写…...

CentOS服务器上VNC连接失败?手把手教你排查并修复个人端口问题(附重启命令)

CentOS服务器VNC连接故障深度排查指南&#xff1a;从原理到实战当你在深夜赶项目时&#xff0c;突然发现VNC连接不上服务器&#xff0c;那种焦虑感我深有体会。去年参与半导体器件仿真项目时&#xff0c;我也曾被这个问题困扰整整两天。本文将分享一套经过实战检验的排查方法论…...

广州因特智能:AI视觉软硬结合,打破半导体检测装备“卡脖子”困境

【导语&#xff1a;广州因特智能科技孵化于西安电子科技大学广州研究院&#xff0c;专注用AI视觉技术解决工业场景的“卡脖子”检测难题&#xff0c;为半导体、光通信、新能源三大领域提供高端检测装备。】校地合作孵化&#xff0c;构建完整能力体系广州因特智能科技由西安电子…...

PCB的常规机械通孔与HDI工艺钻孔差异

结合常规 4 层通孔 PCB&#xff08;非 HDI&#xff09; 标准制程&#xff0c;分步骤讲清钻孔时机、先后顺序&#xff0c;区分机械通孔与板件结构&#xff0c;专业且贴合工厂实际流程。一、先明确 4 层通孔板基础结构4 层板结构&#xff1a;L1 → PP 半固化片 → L2/L3&#xff…...

AI算法工程师如何进行模型部署?这2个工具+3个技巧,快速上线

对于软件测试从业者来说&#xff0c;模型部署并不是一个陌生的概念——随着AI功能逐渐渗透到各类应用软件中&#xff0c;测试工程师不仅需要验证模型输出的准确性&#xff0c;更需要理解部署流程对模型稳定性、响应速度和结果一致性的影响。很多测试同学会有这样的困惑&#xf…...

终极鸣潮优化指南:WaveTools工具箱让你的游戏体验飞起来

终极鸣潮优化指南&#xff1a;WaveTools工具箱让你的游戏体验飞起来 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 对于《鸣潮》玩家来说&#xff0c;流畅的游戏体验和个性化的配置管理是提升游戏乐趣的关…...

基于ATmega328P与TFT屏的园艺环境监控系统:硬件选型与软件架构详解

1. 项目概述&#xff1a;打造你的家庭园艺数据监控中心如果你和我一样&#xff0c;是个喜欢在阳台或后院捣鼓花草的园艺爱好者&#xff0c;同时又对电子DIY有点兴趣&#xff0c;那么这个项目绝对会让你兴奋。我们不是在简单地种花&#xff0c;而是在用数据“聆听”植物的需求。…...

3步精通WaveTools:鸣潮全场景性能优化终极指南

3步精通WaveTools&#xff1a;鸣潮全场景性能优化终极指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 开源优化工具WaveTools作为《鸣潮》玩家必备的性能调校助手&#xff0c;通过深度配置优化实现画质…...