如何在一个条件下从json中提取两个值,并在jeter中进行随机化?

iyfjxgzm  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(162)

下面是我需要处理的JSON格式的服务器响应,在这个JSON中,我需要在下一个请求中传递一些对象,我可以成功地在第一个请求中传递这些对象,但问题是在下面的JSON中随机化

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sword of Honour",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "test_title",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Sword of Honour",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "India",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

如果我应用$..book[0][?(@.title==‘荣誉之剑’)]条件,我会看到成功的输出
测试_1={“类别”:“参考”,“标题”:“荣誉之剑”,“作者”:“奈杰尔·里斯”,“价格”:8.95}测试_2={“类别”:“小说”,“标题”:“荣誉之剑”,“作者”:“赫尔曼·梅尔维尔”,“价格”:8.99,“ISBN”:“0-553-21311-3”}

如果我应用$..book[0][?(@.title==‘荣誉之剑’)].作者条件我看到成功的输出TEST_1=Nigel Rees TEST_2=Herman Melville

但是我想为书名==‘荣誉之剑’的书同时提取作者的姓名和价格。实际输出=能够在条件为$..book[0][?(@.title==‘荣誉之剑’)]的情况下检索一个值。作者预期输出=我希望从同一列表中随机接收两个值。迭代1-test_1={“作者”:“Nigel Rees”,“Price”:8.95}迭代2-test_2={“作者”:“Herman Melville”,“Price”:8.99,}迭代3-test_2={“Author”:“Herman Melville”,“Price”:8.99,}

我也尝试过V函数,但只得到了一个值。(book{__V([?(@.title==‘荣誉之剑’)]_${__Random(1,${title_matchNr},)},)})

6qftjkof

6qftjkof1#

1.将JSR223 PostProcessor添加为返回上述JSON的请求的子级
1.将以下代码放入脚本区域:

def swords = new groovy.json.JsonSlurper().parse(prev.getResponseData()).store.book.findAll { book -> book.title == 'Sword of Honour' }

swords.eachWithIndex { def sword, int index ->
    def payload = [:]
    payload.put('author', sword.author)
    payload.put('price', sword.price)
    vars.put('test_' + (index + 1), new groovy.json.JsonBuilder(payload).toPrettyString())
}
vars.put('test_matchNr', swords.size() as String)

1.现在您应该能够使用__V()和__Random()函数组合引用随机的作者/价格对,如:${__V(test_${__Random(1,${test_matchNr},)},)}

更多信息:

相关问题