Jmeter系列(27)- 详解正则提取器
如果你想从头学习Jmeter,可以看看这个系列的文章哦
https://www.cnblogs.com/poloyy/category/1746599.html
有了 JSON 提取器为啥还要用正则提取器?
- JSON 提取器只针对接口返回的响应内容
- 如果想提取的是响应头、请求头的值,而非响应内容的值呢?
- 这个时候正则提取器的作用就出来了,它可以提取请求任一部分的值
需知
- 正则表达式很多内容,在这篇文章中不会展开详细说的哦,主要还是说提取器的使用
- 想详细学习正则表达式可以看这篇文章:待补充
正则提取器
我们通过实际栗子去讲述理论知识点
正则提取器界面介绍
字段含义
字段 | 含义 |
Apply to | 应用范围,选默认的 main sample only 就行了 |
Field to check |
可提取的字段 |
Names of created variables |
|
Regular Expression |
正则表达式 |
Template | 从找到的匹配项中创建字符串的模板 |
Match No.(0 for Random) |
|
Default Value |
|
Use empty default value |
勾选后,提取不到值时,则返回空字符串 |
Template
- 如果一条正则表达式有多个提取结果,则提取结果是数组形式
- 模板 $1$、$2$.....表示把解析到的第几个值赋给变量,从 1 开始匹配
- $0$ 表示整个表达式匹配的内容(后续具体看栗子)
- 若只有一个结果,只能是$1$
Field to check
属性 | 含义 |
Body | 响应体,不包括响应头;最常用 |
Body (unescaped) | 响应体,替换了所有HTML转义符;不建议使用 |
Body as a Document | 从不同类型的文件中提取文本;影响性能 |
Request Headers | 请求头 |
Response Headers | 响应头 |
URL | URL |
Response Code | 响应码 |
Response Message | 响应信息 |
Body
Request Headers
Response Headers
URL
Response Code、Message
入门栗子
栗子的前提
这个栗子,我都会以这个地址的接口来完成 JSON 提取器的实战栗子,大家可以注册个账号玩一玩哦
http://api.yesapi.cn/docs.php?keyword=%E4%BC%9A%E5%91%98&channel=api
测试计划树结构
下面多个栗子都以这个测试计划为基础哦
提取某个特定的值的栗子
登录接口响应
登录是执行其他接口的前置接口,所以要获取用户登录后的 token、uuid
提取 token
提取 uuid
其他接口调用 token、uuid
知识点
- 提其他接口可以通过 ${var} 这种格式,来获取提取到的值
- ( ) 里面写匹配规则,用于解析正则表达式
- .*? 表示匹配任意长度的任意字符,这也是最常用的正则表达式
- 一般 (.+?) 和 (.*?) 能够满足我们 80%的使用场景
一般正则表达式都可以写成下面两种
- 左边界(.+?)右边界
- 左边界(.*?)右边界
举更多栗子前的一些话
- 上面讲的是使用正则提取器时的一个流程,也是实际工作中最简单的栗子
- 在实际项目中,我们可能会出现一条正则表达式有多个提取结果的情况
JSON 字符串
下面的栗子都以这个 JSON 字符串为基础,从里面提取结果
这 JSON 字符串也是某个接口的响应内容,货真价实,感兴趣也可以自己玩一玩:http://api.yesapi.cn/docs-api-App.User.GetList.html
{
"ret": 200,
"msg": "V2.5.1 YesApi App.User.GetList",
"data": {
"total": 4,
"err_msg": "",
"err_code": 0,
"users": [
{
"role": "user",
"status_desc": "正常",
"reg_time": "2020-06-22 20:45:05",
"role_desc": "普通会员",
"ext_info": {
"yesapi_nickname": "",
"yesapi_points": 0
},
"uuid": "0564CE592B4CE914365D8922F6FC4CEC",
"username": "luojunjiess286",
"status": 0
},
{
"role": "user",
"status_desc": "正常",
"reg_time": "2020-06-22 14:27:17",
"role_desc": "普通会员",
"ext_info": {
"yesapi_nickname": "",
"yesapi_points": 0
},
"uuid": "0164DC0680F84DCE40D3DD4A36640ECA",
"username": "luojunjiessa",
"status": 0
},
{
"role": "admin",
"status_desc": "正常",
"reg_time": "2020-03-23 22:48:32",
"role_desc": "管理员",
"ext_info": {
"yesapi_nickname": "",
"yesapi_points": 0
"yesapi_reg_source": ""
},
"uuid": "079BF6BB82AFCFC7084F96AECAF0519F",
"username": "luojunjiess",
"status": 0
}
]
}
}
一条正则表达式只有一个提取结果的栗子
什么叫只有一个提取结果
就是正则表达式里只有一个 ( ) ,且 Match No. 不是 -1
未填写模板
提取器
测试结果
uuid1=
uuid1_g=1
uuid1_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid1_g1=0564CE592B4CE914365D8922F6FC4CEC
知识点
如果正则匹配到值,但是没有填模板,则返回空
$0$
提取器
测试结果
uuid2="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid2_g=1
uuid2_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid2_g1=0564CE592B4CE914365D8922F6FC4CEC
知识点
- $0$ 模板其实返回的就是 uuid2_g0 的值
- 返回了整个正则表达式,不只是 ( ) 内匹配到的值
$1$
提取器
测试结果
uuid3=0564CE592B4CE914365D8922F6FC4CEC
uuid3_g=1
uuid3_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid3_g1=0564CE592B4CE914365D8922F6FC4CEC
知识点
- $1$ 模板其实返回的就是 uuid2_g1 的值
- 仅返回 ( ) 内匹配到的值
$2$
提取器
测试结果
uuid4=null
uuid4_g=1
uuid4_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid4_g1=0564CE592B4CE914365D8922F6FC4CEC
知识点
$2$ 模板并不存在,其实就是 uuid4_g2 变量不存在,即使勾了使用空默认值,也返回 null,
总结
- 其实 uuid 在 JSON 字符串中有三个可匹配到的值,如果不填写匹配数字 Match No. ,则会随机取一个 uuid 并返回
- 像上述的几个栗子,都填了 1 ,所以都返回了第一个匹配到的 uuid
一条正则表达式有多个提取结果的栗子
什么叫有多个提取结果
有两种情况
- 一条表达式有多个 ( )
- 一个 ( ) 匹配到多个值,且 Match No 填了 -1
一个 ( ) 匹配到多个值
提取器
测试结果
手动分成四部分
uuid1_1=0564CE592B4CE914365D8922F6FC4CEC
uuid1_1_g=1
uuid1_1_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid1_1_g1=0564CE592B4CE914365D8922F6FC4CEC uuid1_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid1_2_g=1
uuid1_2_g0="uuid":"0164DC0680F84DCE40D3DD4A36640ECA"
uuid1_2_g1=0164DC0680F84DCE40D3DD4A36640ECA uuid1_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid1_3_g=1
uuid1_3_g0="uuid":"079BF6BB82AFCFC7084F96AECAF0519F"
uuid1_3_g1=079BF6BB82AFCFC7084F96AECAF0519F uuid1_matchNr=3
知识点
- 一个 ( ) 匹配到多个值的场景 ,一般会结合 ForEach控制器,可以循环将提取到的值赋予到 HTTP 请求中
- 可以看看下图的小栗子,这里不展开讲,后面会再详细讲解
结构树 + ForEach 控制器
查看结果树
一条表达式有多个( ),且模板为空
提取器
测试结果
info1=
info1_g=2
info1_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC","username":"luojunjiess286"
info1_g1=0564CE592B4CE914365D8922F6FC4CEC
info1_g2=luojunjiess286
一条表达式有多个( ),且只有一个模板
提取器
测试结果
info2=0564CE592B4CE914365D8922F6FC4CEC
info2_g=2
info2_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC","username":"luojunjiess286"
info2_g1=0564CE592B4CE914365D8922F6FC4CEC
info2_g2=luojunjiess286
知识点
- info2 拿的就是 info2_g1 的值
- $1$ 获取的是第一个 ( ) 匹配到的值, $2$ 获取的是第二个 ( ) 匹配到的值,以此类推
一条表达式有多个( ),且有两个模板
提取器
测试结果
info3=0564CE592B4CE914365D8922F6FC4CECluojunjiess286
info3_g=2
info3_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC","username":"luojunjiess286"
info3_g1=0564CE592B4CE914365D8922F6FC4CEC
info3_g2=luojunjiess286 info4=0564CE592B4CE914365D8922F6FC4CEC,luojunjiess286
info4_g=2
info4_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC","username":"luojunjiess286"
info4_g1=0564CE592B4CE914365D8922F6FC4CEC
info4_g2=luojunjiess286
正则表达式中有多个 ( ) 时的总结
- 如果其中一个 ( ) 匹配不到元素,那也无法获取到值
- 引用名称、匹配数字、缺省值三个字段也只需要填一个值即可,不需要跟 ( ) 的数量一致
- 多个模板( $1$$2$ )的时候,可以用空格、, 、. 连接模板,最终会显示在变量上,如:info4
Jmeter系列(27)- 详解正则提取器的更多相关文章
- JMeter CSRFToken认证登陆(正则提取器的使用)
转自:http://blog.csdn.net/lion19930924/article/details/51189210 前几天用JMeter模拟登陆,但是这个网站开启了csrf认证,因此在post ...
- Jmeter系列(26)- 详解 JSON 提取器
果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 为什么要用 JSON 提取器 JSON ...
- Jmeter正则提取器常用的几种方式
使用jmeter的同学都知道,jmeter提供了各种各样的提取器,如jsonpath.Beanshell.Xpath.正则等!!! 我们就针对正则提取器如何使用进行说明. 举例说明:假设取sessio ...
- 细雨学习笔记:Jmeter上一个请求的结果作为下一个请求的参数--使用正则提取器
Jmeter接口自动化--使用正则提取器,可以把上一个请求的结果取出来,作为下一个请求的入参
- JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
有这样一个压力测试环境,有一个上传页面,上传成功之后服务器会返回一些上传信息(比如文件的 id 或者保存路径之类的信息),然后压力机会继续下一个请求,比如调整 id 为 xx 的文件的一些信息等等.问 ...
- PHP输出缓存ob系列函数详解
PHP输出缓存ob系列函数详解 ob,输出缓冲区,是output buffering的简称,而不是output cache.ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额 ...
- jmeter --响应断言详解
jmeter --响应断言详解 响应断言 :对服务器的响应进行断言校验 (1)应用范围: main sample and sub sample, main sample only , sub-samp ...
- jmeter 基础功能详解
jmeter 基础功能详解 thread group:包含一组线程,每个线程独立地执行测试计划. sampler:采样器,有多种不同的sample实现,用来发起各种请求,如http请求,jdbc请求, ...
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
随机推荐
- Java实现 LeetCode 732 我的日程安排表 III(暴力 || 二叉树)
732. 我的日程安排表 III 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int end)方法 ...
- (Java实现) 洛谷 P1691 有重复元素的排列问题
题目描述 设R={r1,r2,--,rn}是要进行排列的n个元素.其中元素r1,r2,--,rn可能相同.使设计一个算法,列出R的所有不同排列. 给定n以及待排列的n个元素.计算出这n个元素的所有不同 ...
- Java实现 LeetCode 912 排序数组(用数组去代替排序O(N))
912. 排序数组 给你一个整数数组 nums,将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0, ...
- Java实现 LeetCode 524 通过删除字母匹配到字典里最长单词(又是一道语文题)
524. 通过删除字母匹配到字典里最长单词 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到.如果答案不止一个,返回长度最长且字典顺序最小的字符 ...
- Java实现 蓝桥杯 算法训练 约数个数
算法提高 约数个数 时间限制:1.0s 内存限制:512.0MB 输入一个正整数N (1 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,12.共6个 import jav ...
- Java实现 LeetCode 436 寻找右区间
436. 寻找右区间 给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的"右侧". 对于任何区间,你需要存 ...
- Java培训Day02——制作疫情地图(一)
一.前言 此次培训,是为期三天的网上培训.最终的目的是制作出疫情地图.首先我们来看看主要的讲课内容大纲. Day1 |-Java语法学习(个人感觉讲得还可以,主要围绕本次培训作出的讲解,没有像网上的基 ...
- 用struts的action运行jsp页面
struts是开源框架.使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间.如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的 ...
- 我们是如何做DevOps的?
一.DevOps的理解 DevOps的概念理解 DevOps 的概念在软件开发行业中逐渐流行起来.越来越多的团队希望实现产品的敏捷开发,DevOps 使一切成为可能.有了 DevOps ,团队可以定期 ...
- [原创][开源] SunnyUI.Net 主题
SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...