性能测试工具 Jmeter 常用后置处理器之正则表达式提取器、JSON 提取器、JSON JMESPath Extractor

Tester_谜城 · 2020年06月19日 · 最后由 Tester_谜城 回复于 2022年04月18日 · 3144 次阅读

后置处理器在取样器执行之后执行,通常用于提取处理样本返回数据,应用于同一范围内的所有取样器,如果要将后置处理器应用于指定的取样器,需要将其添加为取样器的子代。

后置处理器在断言之前运行,所以无权访问任何断言结果。

正则表达式提取器

允许用户使用正则表达式从服务器响应中提取值。作为后处理器,此元素将在其范围内的每个 Sample 请求之后执行,应用正则表达式,提取请求的值,生成模板字符串,并将结果存储到给定的变量名称中。

在这里插入图片描述

属性描述

名称:显示的此取样器的描述性名称,可自定义

Apply to: 仅主样本 :仅适用于主样本
仅子样本 :仅适用于子样本
主样本和子样本 :均适用。
使用的 JMeter 变量名称 -提取将应用于命名变量的内容
要检查的响应字段 正则表达式提取的目标,即设定从哪里提取

引用名称 :可引用的变量名称
正则表达式: 用于解析响应数据的正则表达式

模板 :模板的语法是:' $ 1 $ '引用组 1,' $ 2 $ '引用组 2。$ 0 $ 引用整个表达式匹配的内容。
匹配数字: 指示要使用的匹配项。

缺省值: 如果表达式不匹配,则将变量设置为缺省值

JSON 提取器

JSON 提取器可以使用 JSON-PATH 语法从 JSON 格式的响应中提取数据。

该后处理器与正则表达式提取器非常相似。必须将其放置为 HTTP Sampler 或具有 JSON 响应的任何其他取样器的子级,可以以非常简单的方式提取 JSON 文本内容。

在这里插入图片描述

属性描述
名称 显示的此取样器的描述性名称,可自定义

Apply to 仅主样本 :仅适用于主样本
仅子样本 :仅适用于子样本
主样本和子样本 :均适用。
使用的 JMeter 变量名称 -提取将应用于命名变量的内容

Names of created variables 以 ; 分隔的变量名称(需要匹配 JSON Path 的数量)
JSON Path Expressions 以 ; 分隔的 JSON Path 表达式(必须匹配变量数量)

Default Values 以 ; 分隔的默认值,若表达式没有匹配结果,则使用默认值
Match No. (0 for Random) 如果 JSON Path 提取到多个结果,则可以设置选择提取哪个结果作为变量

Compute concatenation var 如果找到许多结果,将使用' , '分隔符将它们连接起来,并将其存储在名为 _ALL 的 var 中

Match No. (0 for Random) 中设置:
0:表示随机(默认值)
-1:表示提取所有结果,它们将被命名为<变量名> _N(其中 N 从 1 到结果数)
X:表示提取第 X 个结果。如果此 X 大于匹配数量,则不返回任何内容。将使用默认值

关于 JsonPath 的详细使用介绍
JSON 示例:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}

提取所有书的作者 :$.store.book[*].author
提取所有的作者 :$..author

提取 store 包含的所有数据 :$.store.*
提取所有物品的价格 :$.store..price

提取第三本书的数据 :$..book[2]
提取倒数第二本书的数据 :$..book[-2]

提取前两本书的数据 :$..book[1,2]
提取索引 1(包括)到索引 2(不包括)的书的数据 :$..book[1:2]

提取最后两本书 :$..book[-2:]
所有带有 isbn 属性的书 : $..book[?(@.isbn)]

所有价格小于 10 的书 :$..book[?(@.price < 10)]
所有价格小于属性 “expensive” 的书 :$..book[?(@.price<=$['expensive'])]

需要注意的是, Json 提取器中不允许在 JsonPath 末尾调用函数(min()、max()、avg()、stddev()、length()、sum()),如果使用这些函数,将无法获取预期的结果。
通常的,编写 JsonPath 时,可以通过察看结果树中的 Json Path Tester 测试提取的结果是否符合预期。

JSON JMESPath Extractor

JSON JMESPath Extractor 作为 5.2 版本之后加入的后置处理器,其功能与 JSON 提取器类似,都是对 JSON 格式的返回数据进行提取,但使用的语法不同。JSON JMESPath Extractor 使用 JMESPath 查询语言从 Json 结果中提取值。
在这里插入图片描述
属性描述

名称 :显示的此取样器的描述性名称,可自定义
Apply to

仅主样本 :仅适用于主样本
仅子样本 :仅适用于子样本
主样本和子样本 :均适用。
使用的 JMeter 变量名称 :提取将应用于命名变量的内容

Names of created variables :变量名称
JMESPath Expressions :JMESPath 表达式

Default Values :若表达式没有匹配结果,则使用默认值
Match No. (0 for Random) :如果 JMESPath 提取到多个结果,则可以设置选择提取哪个结果作为变量

Match No. (0 for Random) 中设置:
0:表示随机(默认值)
-1:表示提取所有结果,它们将被命名为<变量名> _N(其中 N 从 1 到结果数)
X:表示提取第 X 个结果。如果此 X 大于匹配数量,则不返回任何内容。将使用默认值
关于 JMESPath 的详细使用介绍

Json JMESPath 示例:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}

提取所有书的作者 :store.book[*].author
提取 store 包含的所有分类数据 :store.*

提取所有物品的价格 :store.[bicycle.price,book[*].price]
提取第三本书的数据 :store.book[2]

提取倒数第二本书的数据 :store.book[-2]
提取前两本书的数据 :store.book[:2]

提取索引 1(包括)到索引 2(不包括)的书的数据 :store.book[1:2]
提取最后两本书 :store.book[-2:]

所有带有 isbn 属性的书 :store.book[?(@.isbn)]
所有书种类的数量 :length(store.book[*])

价格最高的书名 :max_by(store.book, &price).title
价格最低的书信息 :min_by(store.book, &price)

JSON JMESPath Extractor 与 JsonPath 提取器对比

一个 JsonPath 提取器可以通过 ; 分离的方式,提取多个变量表达式

JSON JMESPath Extractor 只支持提取一个变量,如果要提取多个变量,则需要添加多个 JSON JMESPath Extractor

JsonPath 提取器不支持函数,JSON JMESPath Extractor 支持使用函数 length()、max_by()、min_by(),可应用于部分特殊场景,所以可以根据场景实际需要,选择要用的提取器类型

共收到 2 条回复 时间 点赞

请问我在循环下有个 json 提取,然后把提取的参数赋值到用户参数,然后在后置监控怎么第一次循环会没值呢

srw123 回复

JSON 提取属于后置处理器,是在请求执行之后才会执行的元件

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册