JMeter 后置处理器之正则表达式提取器详解
后置处理器之正则表达式提取器详解
by:授客 QQ:1033553122
1. 添加正则表达式提取器
右键线程组->添加->后置处理器->正则表达式提取器

2. 提取器配置介绍

说明:
Apply to
Main sample only - 仅作用于Main sample
Sub-samples only - 仅作用于sub-sample
Main sample and sub-samples - 作用于两者
JMeter Variable - 仅作用于命名变量
提取器按顺序,作用于所有满足条件的sample。比如有一个Main sampler和3个子sub-sample,每个都包含一个匹配正则表达的值,也就是说正则表达式总的匹配4个值。
如果设置匹配数字为3,选择Sbu-samples only,提取器将匹配第三个sub-sample;
如果设置匹配数字为3,选择Main sample and sub-samples,提取器将匹配第二个sub-sample;
如果设置匹配数字为0,或者负数,提取器将处理所有满足的sample;
如果设置匹配数字大于0,那么一旦找到足够匹配的将停止匹配
Field to check(要检查的响应字段)
Body - 响应体(包含请求头)
Body (unescaped) - 所有html转义字符都被替换后的响应体。需要注意的是,jmeter不会根据上下文处理html转义字符,所以可能会有不正确替换,另外,该选项很影响性能,仅在绝对必要并且意识到其影响的情况下使用。
Body as a Document - 通过Apache Tika,从各种类型的文档中提取文本。注意,该选项很影响性能
Request Headers - 请求头,可能不适用非HTTP sample
Response Headers - 响应头,可能不适合非HTTP sample
URL
Response Code - 响应状态码,比如 200
Response Message - 响应消息,比如 OK
引用名称
用于存储结果的变量名称,自定义输入。需要注意的是,每个匹配组的名称为 refname_g#。其中 refname 为输入的变量名称, # 为组号。group0 为整个匹配, group1 为第1组
正则表达式
至少包含一组(),以捕获匹配的字符串,除非模板使用$0$
模板
$1$ 表示 group1
$2$ 表示 group2
$0$ 表示整个匹配的整个表达式
匹配数字(0表示随机)
0 表示随机
大于0的正数N 表示选择第N个匹配的
负数表示获取全部,供For Each 控制器使用
正则表达式,模板和匹配数字的关系(个人理解)
$0$ 表示存储整个正则表达式匹配的值,分组名称:refname_g0
$1$,$2$,…,$N$ 分别存储正则表达式匹配到的第1组,第2组,…,第N组的值,即同正则表达式中,从左往右的每个括号“(……)”里的表达式匹配到的值一一对应,分组名称:refname_gN(此处,N为正整数)
匹配数字N,代表了索引,从1开始,0表示随机,负数表示全部,需结合For Each 控制器使用。正则表达式可能会匹配多个值,所以每个组都可能会有多个匹配的值,所以,需要指定取哪个值(此处,N为0,整数)
也就是说,$x$ 指定了从从哪个、哪些组取数据, 匹配数字指定了每个组中待取的目标值。注意,模板支持多个组,比如$1$$2$…$N$,对应的,${refname}的取值为每个组中对应索引值按模板顺序拼接后的值
总之,默认情况下,${refname}的值,就是根据上述规则取的,当然我们可以通过 ${refname_g#}的方式,获取指定组中的数据,比如${refname_g0},${refname_g1},
${refname_g2}会根据匹配数字,分别从第0,1,2组中取对应的值。
缺省值
如果正则表达式没有匹配到值,则设置变量${var}为默认的值,否则引用了${var}的地方,不会替换${var}为对应的变量值。
Use empty default value 如果勾选,则设置默认值为空字符串
3. 例子


HTTP2请求响应内容:
{'bagNo': '94509771001', 'destDeptCode': '755AB'}{'bagNo': '94509772001', 'destDeptCode': '755CD'}{'bagNo': '94509773001', 'destDeptCode': '755EF'}
以下是相同正则表达式下,不同模板及匹配数字下运行的不同结果:
正则表达式:'bagNo': '(.+?)', 'destDeptCode': '(.+?)',
实验1
1、
模板:$1$
匹配数字:0
${value}取值:每次从94509771001,94509772001,94509773001三者中随机取一个
2、
模板:$1$
匹配数字:1
${value}取值:94509771001

3、
模板:$1$
匹配数字:2
${value}取值:94509772001
实验2
1、
模板:$2$
匹配数字:1
${value}取值:755AB
2、
模板:$2$
匹配数字:2
${value}取值:755CD
实验3
1、
模板:$1$$2$
匹配数字:1
${value}取值:94509771001755AB
2、
模板:$2$$1$
匹配数字:2
${value}取值:755CD94509772001
实验4
1、
模板:$0$
匹配数字:1
${value}取值:'bagNo': '94509771001', 'destDeptCode': '755AB',
2、
模板:$0$
匹配数字:2
${value}取值:'bagNo': '94509772001', 'destDeptCode': '755CD',
4. 正则表达式说明
():封装了待返回的匹配字符串。
.:匹配任何字符串。
+:一次或多次。
?:在找到第一个匹配项后停止
5. 参考链接:
http://jmeter.apache.org/usermanual/regular_expressions.html
http://jmeter.apache.org/usermanual/component_reference.html#Regular_Expression_Extractor
JMeter 后置处理器之正则表达式提取器详解的更多相关文章
- jmeter后置处理器之Json提取器详解
此提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值 ...
- Jmeter后置处理器,正则表达式提取器的使用
[使用场景]:下一个请求参数需要从上一个请求的响应数据中获取 [jmeter正则表达式说明]:使用perl正则表达式(可参考:http://www.runoob.com/perl/perl-regul ...
- Jmeter 正则表达式提取器详解(Regular Expression Exactor)
Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...
- jmeter数据关联_后置处理器_正则表达式提取器
- jmeter后置处理器之正则表达式
一.基本用法——提取某个值 场景:提取某个值,保存成变量,供后面的接口使用 步骤: 1.运行脚本,从响应结果中查找要提取的值,找到左右边界. 例如要获取“patientInfoId”作为下一个请求的参 ...
- jmeter-提取器之正则表达式提取器
在接口测试中,有很多的接口参数值是需要从上一个接口的返回值中获取的,这个时候就可以用正则表达式提取器啦 例如: 接口1 /user/login 返回{ "user_ticket" ...
- jmeter之json提取器详解
Json提取器详解 *Apply to:参照正则表达式提取器 *Names of created:自定义变量名. 变量名可以填写多个,变量名之间使用分号进行分隔. 一旦变量名有多个,则下方的json ...
- Jmeter学习笔记(十九)——后置处理器之正则表达式的使用
一.正则表达式提取器的作用 允许用户从服务器的响应中通过使用perl的正则表达式提取值.作为一个后置处理器,该元素会作用在指定范围的取样器,应用正则表达式,提取所需要的值,生成模板字符串,并将结果存储 ...
- Jmeter(五)关联之正则表达式提取器
我们在用Jmeter做接口或者性能测试时,经常会碰到第二个请求提交的的参数要从第一个请求返回的参数中获取,而这些参数值并不是固定的,是动态变化的,这种场景就要用到关联 Jmeter提供了一种叫做正则提 ...
随机推荐
- 来,带你鸟瞰 Java 中4款常用的并发框架!
1. 为什么要写这篇文章 几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库. 但是,当深入实现细节时,我们想起了一位智者曾经说过 ...
- [原创]K8飞刀Final
法律声明: 工具仅供安全研究或授权渗透,非法用途后果自负. 工具: K8飞刀Final作者: K8哥哥博客: https://www.cnblogs.com/k8gege简介: 一款多功能网络安全渗透 ...
- [源码]Python简易http服务器(内网渗透大文件传输含下载命令)
Python简易http服务器源码 import SimpleHTTPServerimport SocketServerimport sysPORT = 80if len(sys.argv) != 2 ...
- 树莓派配置wifi链接
使用树莓派链接网络是必然的,这里讲一讲如何连接到wifi. 扫描WIFI sudo iwlist wlan0 scan 扫描后得到以下结果 这里的“ESSID”是无线网的名称. 添加有密码的WIFI网 ...
- Java核心技术及面试指南 线性表方面的面试题总结以及答案
3.2.7.1 请用ArrayList实现Stack以及Queue的功能. public class ArrayListStack extends ArrayList implements Stack ...
- GloVe损失函数的理解
简介 GloVe是一种非常简单快速的训练词向量的算法.与复杂的word2vec相比,其是一个log双线性模型,仅通过一个简单的损失函数就能够得到很好的结果. (1)J=∑i,jNf(Xi,j) ...
- 深度学习Trick——用权重约束减轻深层网络过拟合|附(Keras)实现代码
在深度学习中,批量归一化(batch normalization)以及对损失函数加一些正则项这两类方法,一般可以提升模型的性能.这两类方法基本上都属于权重约束,用于减少深度学习神经网络模型对训练数据的 ...
- MySQL高可用之组复制技术(2):配置单主模型的组复制
MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...
- iOS -数据持久化方式-以真实项目讲解
前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...
- Winform系列——好看的DataGridView折叠控件
来园子几年了,第一次写博客.以前看到别人的博客就在想:这些人怎么能有这么多时间整理这么多知识,难道他们不用工作.不用写代码.不用交付测试?随着工作阅历的增加,发现其实并不是时间的问题,关键一个字:懒. ...