JMeter - JSON Extractor извлекает правильное значение в одном случае, но ноль в другом случае
У меня есть два запроса, которые возвращают ответ с аналогичной структурой JSON. Когда я пытаюсь использовать JSON Extractor на одном, он работает правильно, но когда я пытаюсь извлечь значение таким же образом из второго, он не работает. Но давайте перейдем к преследованию.
Мой первый ответ выглядит так:
{
"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
}
]
}
И я пытаюсь извлечь идентификатор объекта, который "ownToUser": false в этом экстракторе JSON:
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"
}
]
}
Я пытаюсь получить идентификатор объекта, который имеет заголовок variable = "Money" с помощью экстрактора JSON:
JSON path expression: values[?(@.title == 'Money')].id
Match No.: 0
Default Values: null
Но он не находит значение id и устанавливает для моей переменной JMeter значение null. Я также пытался оставить Деньги без кавычек или в двойных кавычках и пробовал различные выражения пути JSON, например
$.values[?(@.title == 'Money')].id
$..[?(@.title == 'Money')].id
$.[?(@.title == 'Money')].id
Но ни один из них, кажется, не работает. Есть ли у вас какие-либо идеи, как мое выражение пути JSON должно работать правильно? И почему он не работает во втором случае, когда он работает в первом? Это потому, что объекты во втором ответе имеют внутренний массив?
2 ответа
$..[?(@.title == 'Money')].id
выражение должно работать просто отлично:
Скорее всего, ваша установка JMeter повреждена, и вы испытываете некоторую форму адского джаза из-за некоторой конфликтующей библиотеки в JMeter Classpath (это может быть вызвано наличием устаревших плагинов JSON или аналогичных) . Поэтому я бы порекомендовал получить чистую последнюю версию JMeter и опробовать на ней свой тест. Если вы используете какие-либо плагины - установите их с помощью JMeter Plugin Manager
Если у вас нет возможности переустановить JMeter, вы можете попытаться разобраться в этом вопросе, заглянув в файл jmeter.log. Если подозрительных записей нет - добавьте следующую строку в файл log4j2.xml:
<Logger name="org.apache.jmeter.extractor.json" level="debug" />