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

news2024/11/14 13:46:23

目录

前言

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博客

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

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

相关文章

npm yarn nrm

npm 和 yarn npm和yarn都是包管理器,yarn是在2016年发布的,那时npm还处于V3时期,那时候还没有package-lock.json文件,不稳定性、安装速度慢等缺点经常会受到广大开发者吐槽。此时,yarn 诞生了。yarn 的优点&#xff0c…

iMessage 开发要点 坑点记录

pod 添加iMessage后,建议podfile要这样: platform :ios, 14.0def commonPod//这里写一些主应用和iMessage都要依赖的库pod "YYKit", ~> 1.0.9 endtarget MainApp doframeworksuse_frameworks!inhibit_all_warnings!# 多Target都有的podco…

【Lua学习笔记】Lua进阶——Require,三目运算

文章目录 Require短路判断实现三目运算符 Require 这是文件aaa.lua的内容 aaa.lua: a 10 local b 20 print("我是aaa")这是文件example.lua的内容 example.lua: a 100 print(a) require("aaa") --require调用其他脚本文件 print(a) print(b) print(&…

亚马逊云科技全新Amazon Bedrock,助力客户构建生成式AI应用

亚马逊云科技近日在纽约峰会上宣布全面扩展其全托管基础模型服务Amazon Bedrock,包括新增Cohere作为基础模型供应商,加入Anthropic和Stability AI的最新基础模型,并发布变革性的新功能Amazon Bedrock Agents功能。客户无需管理任何基础设施&a…

ceph集群中RBD的性能测试、性能调优

文章目录 rados benchrbd bench-write测试工具Fio测试ceph rbd块设备的iops性能测试ceph rbd块设备的带宽测试ceph rbd块设备的延迟 性能调优 rados bench 参考:https://blog.csdn.net/Micha_Lu/article/details/126490260 rados bench为ceph自带的基准测试工具&am…

OnnxRuntime TensorRT OpenCV::DNN性能对比(YoloV8)实测

1. 前言 之前把ORT的一套推理环境框架搭好了,在项目中也运行得非常愉快,实现了cpu/gpu,fp32/fp16的推理运算,同onnx通用模型在不同推理框架下的性能差异对比贴一下,记录一下自己对各种推理框架的学习状况 YoloV8模型大小 模型名称参数量NANO3.2M...... 2. CPU篇 CPU推理框架性…

【三维重建】SceneRF:基于NeRF的自监督单目三维场景重建

文章目录 摘要一、前言二、方法2.1.用于新的深度合成的NeRF3.1.1 深度估计 3.2 概率射线采样 (PrSamp)3.3 球形Unet(SU-net)3.4.场景重建方案 四、实验总结 摘要 从二维图像的三维重建被广泛的研究,训练与深度监督。为了放松对昂贵获取的数据…

火爆全网,Charles抓包教程-辅助接口测试(一)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 charles是一款非常…

【C++进阶】多态的理解

一.多态是什么 多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。 对于多态,不同的对象传过去,会调用不同的函数; 即多态调用看的是指向的对象。 //A,B类中的func函数是个多态 class A { pu…

自制Nuget包(C#)

自制Nuget包 自制C# Nuget包。 目的: 生成一个可以通过Nuget管理自动应用的包,生成效果如图: 步骤: 整个制作过程分为两步:第一步制作Nuget包,第二步上传Nuget包到Nuget网站(地址&#xf…

Redis实战(2)——互斥命令用于构建分布式锁

1 什么是分布式锁 在单体应用中,线程锁是可以让多个线程串行执行一段代码逻辑的。不过在集群环境或者是分布式的环境下,线程锁无法保证线程串行运行,从而出现线程安全的问题。 根本的原因在于,在 集群分布式环境下 \textcolor{r…

F12 浏览器调试模式页面刷新 network 日志刷新消失的解决办法

每次请求刷新后都把之前的请求记录刷新掉了,把preserve log勾选上后,所有的请求都会保留,再也不怕抓不到记录了。

配置 gitlab https 访问

文章目录 1. 备份2. 生成SSL证书3. 配置文件4. 重启5. 访问 1. 备份 docker exec -ti gitlab-ce gitlab-rake gitlab:backup:create2. 生成SSL证书 yum install openssl openssl-devel -y mkdir /data/gitlab/config/ssl ; cd /data/gitlab/config/ssl### 生成证书 openssl…

郑州Sectigo DV通配符SSL证书

我们在浏览器访问网页时或许不会注意到网站是http还是https链接,但是一定能注意到浏览器给我们展示的“不安全”警告,警告访问者网站未加密,访问网站会有泄露隐私的危险。SSL证书能将网站链接由http转为https,对网站传输数据加密&…

数据科学复现

片段 线性回归建模步骤.py 用sklearn做简单的一元线性回归.py 红用逻辑回归实现红酒数据分类py 高斯朴素贝叶斯分类py

uni-app如何生成正式的APK

第一步: 进入dcloud官网https://dcloud.io/,点击开发者后台进入登录注册页面 第二步:登录之后跳到项目列表,选择自己想要打包的项目 点击进去如果没有生成证书,点击生成证书,如果显示证书已生成就不用管了…

什么样的程序员在35岁后仍然保持竞争力?

作为程序员,大家肯定都听说过程序员的35岁危机,有的人刚入职程序员这个岗位就开始为自己的未来担忧,然而,与其担心自己35岁以后被优化掉,不如现在想想,怎么让自己到了35岁以后在这个岗位上依旧有竞争力。今…

【Python】在PyCharm中安装 ChatGPT 插件,让 AI 帮助我们写代码,从此代码再无报错,小白也能轻易上手!!!

前言 ChatGPT是目前最强大的AI,不仅能够聊天、写小说,甚至码代码也不在话下。 但是在国内要使用chatgpt很麻烦,国内一家团队开发了一款idea插件NexChatGPT,用数据代理的方式,让我们在国内也能轻松的使用chatgpt。 没…

【图像去噪】基于进化算法——自组织迁移算法(SOMA)的图像去噪研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…