Jmeter后置处理器之Json提取器详解
说明
此提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key
,其中key
为返回结果map中的一个键,如果是多层则继续用.key
进行即可,如果遇到key的value值为一个List,则使用.key[n]
,其中n
为list中元素的编号,如下使用实例来说明下如何使用;
用法说明
调试方法:
在View Result Tree中选择JSON Path Tester,即可展开如下图的右侧内容,输入表达式即可拿来测试书写的Json提取器表达式是否能正常工作:
下面这个图片中的json字符串即为测试对象:
1、获取第一层中的某个value值:
获取jsonrpc
这个key的value值:
输入$.jsonrpc
:
正常获取到结果
2、获取第二层List中某个key的value值
譬如我们要获取result的值中第一个元素的name的值,预期应当为111
,使用如下语句:$.result[0].name
结果符合预期,此处注意列表编号从0开始;
3、获取第三层的某个value值
譬如我们要获取528
,使用语句为$.result[1].approver[0]
从这里可知,我们书写表达式时需要根据是map还是list来进行区别,list需要使用[n]
标号,而map则不用,每一层用.
来区分即可;
4、获取列表下全部的某一个元素
譬如我们要获取全部的key
为name
的value
值,可以使用如下语句$.result[*].name
获取到的为一个列表,其有三个值,符合预期;
那么获取第三层中所有的的第一个元素呢?
表达式为$.result[*].approver[0]
,结果如下:
符合预期;
这里说明下,使用*
号意味着获取所有列表元素;
此种情况下返回的为一个list,那么如果此list被放入参数var
中,那么我如果想获取var中某一个值譬如528
该如何使用呢?答案就是在参数名后边加_n
,其中n为编号,从1开始;${var_2}
即可获取到列表中第二个元素即528
;