JMeter-JSON提取器在一种情况下提取正确的值,而在另一种情况下提取空值

时间:2018-09-10 12:45:14

标签: json jmeter json-path-expression

我有两个请求以相似的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”对象的ID:false:

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变量设置为null。 我还尝试不使用Money或双引号,并尝试使用其他JSON路径表达式,例如

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

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

2 个答案:

答案 0 :(得分:0)

我使用了您的代码,它给出了正确的结果。请检查以下图像。 enter image description here

enter image description here 我也尝试过版本3.1,并且工作正常。

希望这会有所帮助。

在下面的图像中查看视图结果树中不同类型的选项。 enter image description here

答案 1 :(得分:0)

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

JMeter JSON Path Tester Conditional

您的JMeter安装很可能已损坏,并且由于jar hell中的某些冲突库而遇到了某种形式的JMeter Classpath(这可能是由于已弃用的JSON Plugins或类似原因引起的)。因此,我建议您获取干净的latest版本的JMeter并尝试对其进行测试。如果您使用的是任何插件,请使用JMeter Plugin Manager

安装它们

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

<Logger name="org.apache.jmeter.extractor.json" level="debug" />