JMeter: Попытка проверить два или более значений в случайно назначенном json пути - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть ответ JSON, который выглядит следующим образом:

{
"results": [
    {
        "entityType": "PERSON",
        "id": 679,
        "graphId": "679.PERSON",
        "details": [
            {
                "entityType": "PERSON",
                "id": 679,
                "graphId": "679.PERSON",
                "parentId": 594,
                "role": "Unspecified Person",
                "relatedEntityType": "DOCUMENT",
                "relatedId": 058,
                "relatedGraphId": "058.DOCUMENT",
                "relatedParentId": null
            }
        ]
    },
    {
        "entityType": "PERSON",
        "id": 69678,
        "graphId": "69678.PERSON",
        "details": [
            {
                "entityType": "PERSON",
                "id": 678,
                "graphId": "678.PERSON",
                "parentId": 594,
                "role": "UNKNOWN",
                "relatedEntityType": "DOCUMENT",
                "relatedId": 145,
                "relatedGraphId": "145.DOCUMENT",
                "relatedParentId": null
            }
        ]
    }

Проблема с этим ответом JSON состоит в том, что $ .results [0] не всегда одинаков, и он может иметь десятки результатов. Я знаю, что могу делать индивидуальные вызовы JSON Assertion, когда я выполняю JSON с подстановочным знаком

$. Results [*]. Details [0] .entityType

$. Results [*]. details [0] .relatedEntityType et c

Однако мне нужно убедиться, что "PERSON" и "DOCUMENT" правильно совпадают в одном и том же пути при одном вызове API, так как результаты возвращаются в каждый раз разные пути.

Есть ли способ сделать несколько вызовов в одном JSON Утверждении или я использую неправильный инструмент?

Заранее спасибо за любую помощь.

-Grav

1 Ответ

0 голосов
/ 14 апреля 2020

Я не думаю, что JSON Утверждение достаточно гибкое, рассмотрите возможность переключения на JSR223 Утверждение , где у вас есть полная гибкость в плане определения любых необходимых вам критериев прохождения / неудачи.

Пример кода, который проверяет, что:

  • все значения атрибутов, которые соответствуют запросу $.results[*].details[0].entityType, равны PERSON
  • , и значения всех атрибутов, которые соответствуют $.results[*].details[0].relatedEntityType равны DOCUMENT

будет:

def entityTypes = com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$.results[*].details[0].entityType').collect().find { !it.equals('PERSON') }
def relatedEntityTypes = com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$.results[*].details[0].relatedEntityType').collect().find { !it.equals('DOCUMENT') }

if (entityTypes.size() != 1) {
    SampleResult.setSuccessful(false)
    SampleResult.setResponseMessage('Entity type mismatch, one or more entries are not "PERSON" ' + entityTypes)
}
if (relatedEntityTypes.size() != 1) {
    SampleResult.setSuccessful(false)
    SampleResult.setResponseMessage('Entity type mismatch, one or more entries are not "DOCUMENT" ' + relatedEntityTypes)
}

Дополнительная информация:

  1. Класс SampleResult JavaDo c
  2. Groovy: Работа с коллекциями
  3. Сценарии Утверждения JMeter в Groovy - Учебное пособие
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...