JMeter 后置处理器之正则表达式提取器详解

简介: JMeter 后置处理器之正则表达式提取器详解

后置处理器之正则表达式提取器详解

 

 

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

 

 

目录
相关文章
|
7月前
|
Java 测试技术 数据处理
JMeter前置处理器-Beanshell前置处理器详解
JMeter的Beanshell前置处理器允许用Java-like语法执行测试前的自定义逻辑,如参数化和数据处理。要添加它,右键点击HTTP请求,选择“添加”->“前置处理器”->“Beanshell前置处理器”。内置变量如`vars`, `ctx`, `log`和`props`提供与JMeter变量、上下文、日志和属性的交互。例如,`vars.get("key")`用于获取变量,`log.info()`用于记录日志。使用这些工具,测试者能增强性能测试的复杂性和准确性。
|
7月前
|
测试技术
JMeter前置处理器-用户参数详解
JMeter是一款开源性能测试工具,其前置处理器功能强大,能模拟真实用户行为。本文聚焦于用户参数这一重要前置处理器,阐述了用户参数的作用域规则:全局(测试计划)、线程组或请求级别。通过实例展示了如何定义单个或多个用户值,并说明了“每次迭代更新一次”选项的影响。用户参数与用户定义变量的主要区别在于,前者可为参数分配多个值,且在变量名冲突时优先级更高。理解这些概念有助于优化JMeter的性能测试效率。
|
JSON 数据安全/隐私保护 数据格式
|
JSON 数据格式
jmeter正则表达式提取器的用法和正则
jmeter正则表达式提取器的用法和正则
356 0
jmeter的正则表达式提取器的用法和切换参数查看格式
jmeter的正则表达式提取器的用法和切换参数查看格式
|
存储 JSON 测试技术
JMeter 后置处理器之JSON提取器
JMeter 后置处理器之JSON提取器
436 0
|
存储 索引
JMeter 正则表达式提取器结合ForEach控制器遍历提取变量值
JMeter 正则表达式提取器结合ForEach控制器遍历提取变量值
190 0