一、JSON Extractor
1.使用场景
json extractor后置处理器用在返回格式为json的HTTP请求中,用来获取返回的json中的某个值。并保存成变量供后面的请求进行调用。
2.配置说明
Variable names:保存的变量名,后面使用${Variable names}引用,可以提取多个变量,变量名中间用英文分号分隔,最后一个变量后面不需要符号
JSON Path expressions:json path表达式,若提取的是多个变量,则需要多个json表达式,json表达式中间用英文分号分隔,最后一个表达式后面不需要符号,json表达式中可能涉及到索引,索引从0开始取值,表示通配。取第一个值用索引[0],取所有值则使用通配符[*]
,若使用通配符[],但又想取第一个值,则需要结合参数Match Numbers,写1表示匹配所有获取值的第1个值
eg:$.result.data.tasks[*].woCode;$.result.data.tasks[*].boxQty;$.result.data.tasks[0].taskId
Match Numbers:0表示随机;n取第几个匹配值;-1匹配所有。若只要获取到匹配的第一个值,则填写1
Default Values:找不到时默认值,一般设置为NOT FOUND
Compute concatenation var(suffix_ALL):如果匹配到多个结果,将使用’ , '分隔符将它们连接起来,命名为“变量名_ALL”
taskId_ALL=396671,396651,396681,396661,396611,396641,396621,396601,396631
有些服务请求中的请求数据,就会用到这种格式,故有使用的价值
注意:变量用分号分隔,各输入栏输入的个数要对应
json格式提取器,当Match Numbers取-1匹配出所有值时,所有值的取值序号从1开始,每个值的命名方式为变量名称_数字如:
ids_1=114882
ids_2=114881
ids_3=114880
但是json表达式(JSON Path Expressions)中若json数据中某层级为列表,则列表的索引从0开始
备注:对于JSON Extractor提取到的每个变量,都会同步生成一个Jmeter变量:变量名_matchNr,表示这个变量的值的匹配个数,这个变量也非常有用。
3、特殊场景关注
(1).如果json格式数据中key所对应的value是个普通列表,则可用通过列表索引获取某个值,如key[0]、key[1],json格式提取
器中的Match No(设置为1);如果使用索引使用通配符key[*],则Match No 设置为几则获取第几个值,Match No设置为-1,则
获取所有值
如下:giContainerPrints参数值为一个列表
如下:taskIds参数值为一个列表
还可以不带索引直接通过key值,直接获取一个列表
如下:taskIds参数值为一个列表
(2).如果json格式数据中key所对应的value是个列表,列表中每个值又是一个json消息体,则可用通过列表索引取某个json消息体,通过消息体中的key值获取它的value;
如下:item的value值为一个由多个json格式组成的列表,每个json消息体中都存在qty的参数,如下配置则可用通过json格式提取器提取到第一个json消息体中参数为qty的值
也可以通过索引通配符获取所有json消息体中的该key值对应的所有value值(得配合json格式提取器重点Match No.)
3、如果响应消息体Json数据中某个Key对应的值是个列表,而下个服务请求的入参为一个列表,则可以直接通过上个响应消息体中的key值直接获取整个列表,作为下个服务请求的入参
4、Jmeter后置处理器之JSON Extractor各种效果