Jmeter JSON提取器

此提取器用于提取请求返回结果中的某个值或者某一组值,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值为一个List,则使用.key[n],其中n为list中元素的编号,如下使用实例来说明下如何使用;

image

Json提取器语法说明

完整的语法说明详见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
}
JsonPath 结果
$.store.book[*].author 全部书的作者
$..author 所有作者
$.store.* 店里所有,包括书和自行车
$.store..price 所有价格
$..book[2] 第三本书
$..book[-2] 倒数第二本书
$..book[0,1] 前两本书
$..book[:2] 从索引0(含)到索引2(不含)的所有书籍
$..book[1:2] 从索引1(含)到索引2(不含)的所有书籍
$..book[-2:]

最后两本书

$..book[2:]    从尾部到第二本书
$..book[?(@.isbn)] 所有带有ISBN编号的书籍
$.store.book[?(@.price < 10)]

店里所有标价低于10的书

$..book[?(@.price <= $['expensive'])] 店内所有价格低于“expensive”的书
$..book[?(@.author =~ /.*REES/i)] 与正则匹配的所有书籍(忽略大小写)
$..* 返回Store的所有内容
$..book.length() 书的数量

调试方法:

在查看结果树(View Result Tree)中选择JSON Path Tester,即可展开如下图的右侧内容,输入表达式即可拿来测试书写的Json提取器表达式是否能正常工作:

image

从上图的输出可见返回的数组下标从0开始。

添加JSON提取器,获取所有author

image

添加调试取样器调试用,可看到获取到了所有作者的值。通过author_1,....author_22可得到每一个author。

image

将获取到每一个用户author循环进行“http请求”查看结果。

添加循环控制器,设置循环次数:author_matchNr从上面的JSON取样器中匹配到,这里进行变量引用

image

在循环控制器之下添加http请求,并做以下设置。

image

__counter为jmeter自带的一个计数函数,${__counter(,)}引用这个函数,每运行1次+1,从1开始;
author_${__counter(,)}运行第1次author_1,运行第2次author_2,以此类推,直到运行到循环次数author_4
__V为jmeter自带的一个嵌套变量函数,运行第1次author_${__counter(,)}为author_1,${__V(author_${__counter(,)},)}则为${author_1},值Nigel Rees;以此类推,一直循环到${author_4}

image

image

posted on 2021-06-16 16:12  农夫山药  阅读(80)  评论(0编辑  收藏  举报