Как проверить вложенный ответ с помощью REST Assured?

Нужна помощь, чтобы проверить конкретный параметр JSON из ответа ниже, используя библиотеку REST Assured.

Я попробовал некоторые варианты проверки другого аналогичного параметра, как показано ниже, но это не сработало.

.then().body("value.value.value.name", hasItems("balanceResultCode")).body("value.value.value.value", hasItems("0"));

Если я хочу проверить «resultCode» и «subscriberIdType» из ответа ниже, то как я могу это сделать?

[  
{  
    "name":"Id",
    "value":"11"
},
{  
    "name":"version",
    "value":null
},
{  
    "name":"header",
    "value":[  
        {  
            "name":"mVersion",
            "value":"1"
        },
        {  
            "name":"Name",
            "value":"BalQ"
        },
        {  
            "name":"appID",
            "value":"90091"
        },
        {  
            "name":"requestUid",
            "value":"REST_REQUQEST_1"
        },
        {  
            "name":"sessionId",
            "value":"REST_SESSION_1"
        },
        {  
            "name":"requestType",
            "value":"SomeRequestType"
        },
        {  
            "name":"requestNumber",
            "value":"REQ_111"
        },
        {  
            "name":"requestDuplicate",
            "value":"1"
        },
        {  
            "name":"serviceProvider",
            "value":1
        },
        {  
            "name":"username",
            "value":"user"
        },
        {  
            "name":"password",
            "value":"pass"
        },
        {  
            "name":"resultCode",
            "value":100
        }
    ]
},
{  
    "name":"content",
    "value":[  
        {  
            "name":"subscriberAddressing",
            "value":[  
                {  
                    "name":"subscriber",
                    "value":[  
                        {  
                            "name":"subscriberIdType",
                            "value":200
                        },
                        {  
                            "name":"subscriberIdValue",
                            "value":"1234567890"
                        }
                    ]
                }
            ]
        }
    ]
}

]


person OverrockSTAR    schedule 12.04.2015    source источник


Ответы (2)


Это один из способов:

then().
       body("find { it.name == 'header' }.value.find { it.name == 'resultCode' }.value", is(100)).
       body("find { it.name == 'content' }.value.find { it.name == 'subscriberAddressing' }.value.find { it.name == 'subscriber' }.value.find { it.name == 'subscriberIdType'}.value", is(200));

Вы можете прочитать о коллекциях Groovy и GPath, чтобы узнать больше.

person Johan    schedule 12.04.2015
comment
Спасибо за быстрый ответ! Это действительно сработало. У меня есть только один вопрос: будет ли какое-либо влияние на производительность, если у меня будет очень большой ответ со многими такими общими параметрами, поскольку мы используем FIND на каждом уровне узла? - person OverrockSTAR; 12.04.2015
comment
Кроме того, если у вас есть какие-либо документы или полезные ссылки, связанные с коллекциями Groovy и GPath, поделитесь ими. спасибо - person OverrockSTAR; 12.04.2015
comment
Пожалуйста, также поделитесь, если есть какой-либо другой способ, как я вижу, вы упомянули выше, что это один из способов... Я был бы рад узнать и все другие способы, насколько мне известно. Спасибо! :) - person OverrockSTAR; 12.04.2015

Прежде всего, вам нужно импортировать

import static org.hamcrest.CoreMatchers.equalTo;

после этого вы можете использовать его следующим образом

RestAssured.given().auth().oauth2(token).when().accept("application/json").get("someurl").then().statusCode(200).body("name[0]", equalTo("Anwar"));
person Anwar Sir    schedule 21.07.2020