Jmeter之Json 提取器

转自:https://blog.csdn.net/tester_sky/article/details/86081672

JSON Path PostProcessor

JSON后处理器允许您使用JSON- path语法从JSON响应中提取数据。这个后处理器非常类似于正则表达式提取器。它必须作为HTTP采样器或任何其他具有响应的采样器的子对象放置。它会让你以一种非常简单的方式提取文本内容,JSON路径语法参考https://github.com/json-path/JsonPath。

Path Examples

Given the 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
}

在这里插入图片描述

在这里插入图片描述
JSON Path PostProcessor 对应参数:
在这里插入图片描述
Variable Names:将包含JSON-PATH表达式结果的变量,通过分号分隔的名称(必须匹配JSON-PATH表达式的数量);
JSON Path Expressions:分号分隔的JSON-PATH表达式(必须匹配变量的数量);
Match Numbers:如果JSON路径查询导致许多结果,您可以选择提取对应几个作为变量,对应序号可以按自己实际情况调整。其中对应序号从1开始,0为随机获取一个值;
Compute concatenation var:如果找到很多结果,plugin会使用’,'分隔符将它们连接起来,并保存到_ALL;
Default Values:如果JSON-PATH表达式不返回任何结果,则使用分号分隔的默认值(必须匹配变量的数量);

该后置处理器强大的地方是:如果要获取前一个请求返回值,里面是有JsonArray,需要获取里面有多个值,不用BeanShell PostProcessor后置处理器获取理返回的结果。使用该处理器就可以直接获取。

在这里插入图片描述

如上图所示:前一个请求返回了JsonArray,里面包含了6个JSON对象。
分别获取每个对象的角色ID。
其中比较灵活的是Match Numbers,对应序号从1开始。

如果Match Numbers为1;2;3;4;5;6
则按正序把
. d a t a [ ∗ ] . r o l e I d ; .data[*].roleId;.data[].roleId;.data[].roleId;. d a t a [ ∗ ] . r o l e I d ; .data[*].roleId;.data[].roleId;.data[].roleId;. d a t a [ ∗ ] . r o l e I d ; .data[*].roleId;.data[].roleId;.data[*].roleId
获取的值赋值给:roleId1;roleId2;roleId3;roleId4;roleId5;roleId6

如果Match Numbers为6;5;4;3;2;1
则按倒序把
. d a t a [ ∗ ] . r o l e I d ; .data[*].roleId;.data[].roleId;.data[].roleId;. d a t a [ ∗ ] . r o l e I d ; .data[*].roleId;.data[].roleId;.data[].roleId;. d a t a [ ∗ ] . r o l e I d ; .data[*].roleId;.data[].roleId;.data[*].roleId
获取的值赋值给:roleId1;roleId2;roleId3;roleId4;roleId5;roleId6
Match Numbers的顺序可以按自己的需要调整。但是个数必须等于返回的变量个数。
获取到对应值后,就可以在相关作用域里引用对应变量:
${roleId1}
${roleId2}
${roleId3}
${roleId4}
${roleId5}
${roleId6}

原文地址:https://www.cnblogs.com/hsyfighting/p/14437145.html