2

我有两个请求返回具有类似 JSON 结构的响应。当我尝试在一个上使用 JSON 提取器时,它可以正常工作,但是当我尝试以相同的方式从第二个中提取值时,它就不起作用了。但是,让我们切入正题。

我的第一反应是这样的:

{
    "values": [
        {
            "id": 1,
            "name": "Fendi",
            "logoId": null,
            "belongsToUser": true
        },
        {
            "id": 2,
            "name": "Jean Paul Gaultier",
            "logoId": null,
            "belongsToUser": true
        },
        {
            "id": 3,
            "name": "Nike",
            "logoId": null,
            "belongsToUser": false
        },
        {
            "id": 4,
            "name": "Adidas",
            "logoId": null,
            "belongsToUser": true
        }
    ]
}

我尝试在此 JSON 提取器中提取 "belongsToUser": false 的对象的 ID:

JSON path expression: values[?(@.belongsToUser == false)].id
Match No.: 0
Default Values: null

它工作得很好。

但是,当我在第二个响应中尝试这种方式时,它不起作用。响应如下所示:

{
    "values": [
        {
            "id": 12,
            "brandName": "Fendi",
            "productCategoryName": "Shoes",
            "size": "38",
            "colorNames": [
                "color_green"
            ],
            "date": 1536537600000,
            "imageId": null,
            "title": "Money",
            "numberOfOffers": 0,
            "status": "ONGOING"
        },
        {
            "id": 13,
            "brandName": "Fendi",
            "productCategoryName": "Shoes",
            "size": "38",
            "colorNames": [
                "color_green"
            ],
            "date": 1536537600000,
            "imageId": null,
            "title": "Exchange",
            "numberOfOffers": 0,
            "status": "ONGOING"
        }
    ]
}

我尝试使用 JSON 提取器获取具有标题变量 =“Money”的对象的 ID:

JSON path expression: values[?(@.title == 'Money')].id
Match No.: 0
Default Values: null

但它没有找到 id 值并将我的 JMeter 变量设置为空。我还尝试将 Money 不加引号或用双引号括起来,并尝试了不同的 JSON 路径表达式,例如

$.values[?(@.title == 'Money')].id
$..[?(@.title == 'Money')].id
$.[?(@.title == 'Money')].id

但这些似乎都不起作用。您知道我的 JSON 路径表达式应该如何正常工作吗?为什么它在第一种情况下不能在第二种情况下工作?是因为第二个响应中的对象有内部数组吗?

4

2 回答 2

0

$..[?(@.title == 'Money')].id表达式应该可以正常工作:

JMeter JSON 路径测试器有条件的

很可能您的 JMeter 安装已损坏,并且由于JMeter 类路径中的一些冲突库(可能是由于存在已弃用的JSON 插件或类似内容而引起),您会遇到某种形式的jar 地狱。因此,我建议您获取最新版本的 JMeter 并尝试对其进行测试。如果您使用任何插件 - 使用JMeter 插件管理器安装它们


如果您无法重新安装 JMeter,您可以尝试通过查看jmeter.log文件来解决问题。如果没有可疑条目 - 将下一行添加到log4j2.xml文件:

<Logger name="org.apache.jmeter.extractor.json" level="debug" />
于 2018-09-11T05:35:20.720 回答
0

我已经使用了你的代码,它给出了正确的结果。请检查以下图片。 在此处输入图像描述

在此处输入图像描述 我也尝试过 3.1 版,它工作正常。

希望这可以帮助。

查看下图以了解查看结果树中不同类型的选项。 在此处输入图像描述

于 2018-09-10T13:05:31.770 回答