当前位置: 首页 > 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…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战&#xff1a;迈向安全内核的新篇章 ​​摘要&#xff1a;​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言&#xff0c;受限于 C 语言本身的内存安全和并发安全问题&#xff0c;开发复杂模块极易引入难以…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...

window 显示驱动开发-如何查询视频处理功能(三)

​D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针&#xff0c;该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...