JMeter - JSON Extractor извлекает правильное значение в одном случае, но ноль в другом случае - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть два запроса, которые возвращают ответ с аналогичной структурой 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"
        }
    ]
}

Я пытаюсь получить идентификатор объекта с заголовочной переменной = "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 ]

0 голосов
/ 11 сентября 2018

Выражение $..[?(@.title == 'Money')].id должно работать просто отлично:

JMeter JSON Path Tester Conditional

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


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

<Logger name="org.apache.jmeter.extractor.json" level="debug" />
0 голосов
/ 10 сентября 2018

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

enter image description here Я пробовал с версией 3.1 также, и она работает нормально.

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

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

...