Тело ответа фильтра SerenityRest - PullRequest
1 голос
/ 25 мая 2019

Я пытаюсь вернуть значение "Добро пожаловать!"где объект содержит ключ «name», равный «Subject».Данные тела ответа следующие:

"payload": {
    "mimeType": "multipart/alternative",
    "headers": [
       {
            "name": "Mime-Version",
            "value": "1.0"
        },
        {
            "name": "Subject",
            "value": "Welcome!"
        },
        {
            "name": "To",
            "value": "Jane Doe <xyz@xyz.com>"
        },
        {
            "name": "Message-ID",
            "value": "<123456.abc.com>"
        }

Следующий фрагмент вернет первое обнаруженное «значение»: «1,0», но мне нужно получить значение, где name = «Subject».Как я могу отфильтровать результаты и проверить соответствие строки?

Response response = SerenityRest.rest()
   .contentType("application/json")
   .get("URL")
response.then().statusCode(200);
String subject = response.jsonPath().getString("payload.headers.value");

Значение «Welcome» не является статичным, но «name»: «Subject» никогда не изменится.

1 Ответ

1 голос
/ 25 мая 2019

Я не уверен, что понимаю ваш вопрос, если вы ищете фильтр jsonpath для получения значения, связанного с полем "name": "Subject", это должно нормально работать:

"payload.headers[?(@.name=='Subject')].value"

Но явзгляните на json-path rest-assured , которая является библиотекой, используемой Serenity rest для выполнения операции json-path, и эта библиотека использует не стандартный синтаксис json-path, а синтакс, основанный на groovy lambda длявыполнить расширенный поиск.Так что это должно работать:

"headers.find{ it.name == 'Subject' }.value"

Я тестирую на полном примере:

JsonPath.from("{\"payload\": {\n" +
                "    \"mimeType\": \"multipart/alternative\",\n" +
                "    \"headers\": [\n" +
                "       {\n" +
                "            \"name\": \"Mime-Version\",\n" +
                "            \"value\": \"1.0\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"Subject\",\n" +
                "            \"value\": \"Welcome!\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"To\",\n" +
                "            \"value\": \"Jane Doe <xyz@xyz.com>\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"Message-ID\",\n" +
                "            \"value\": \"<123456.abc.com>\"\n" +
                "        }\n" +
                "    ]\n" +
                "}}")
    .getString("headers.find{ it.name == 'Subject' }.value");
// returns "Welcome!"

Этот блог помогает мне понять изменение синтаксиса: Что нового в REST Assured 1.8?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...