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 JSON Path Tester Условно

Скорее всего, ваша установка JMeter повреждена, и вы испытываете некоторую форму адского джаза из-за некоторой конфликтующей библиотеки в JMeter Classpath (это может быть вызвано наличием устаревших плагинов JSON или аналогичных) . Поэтому я бы порекомендовал получить чистую последнюю версию JMeter и опробовать на ней свой тест. Если вы используете какие-либо плагины - установите их с помощью JMeter Plugin Manager


Если у вас нет возможности переустановить JMeter, вы можете попытаться разобраться в этом вопросе, заглянув в файл jmeter.log. Если подозрительных записей нет - добавьте следующую строку в файл log4j2.xml:

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

Я использовал ваш код, и он дает правильные результаты. Пожалуйста, проверьте изображения ниже. введите описание изображения здесь

введите описание изображения здесь Я пробовал с версией 3.1 также, и она работает нормально.

Надеюсь это поможет.

Проверьте изображение ниже для различных типов параметров в дереве результатов просмотра. введите описание изображения здесь

Другие вопросы по тегам