Утверждение множественных совпадений в JSON через RestAssured - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть несколько JSON объектов в ответ, которые содержат определенный идентификатор в каждом из них.

{
"data": [{
        "id": 1,
        "status": {
            "id": 0
        }
    },
    {
        "id": 2,
        "status": {
            "id": 0
        }
    },
    {
        "id": 3,
        "status": {
            "id": 0
        }

    }
]

}

Мне нужно проверить, что каждый data.status.id имеет определенное значение:

    then().
        spec(basicResponse).
        body("data.status.id", equalTo(0));

Но сопоставитель equalTo сопоставляет ожидаемое значение со всем списком из найденных идентификаторов сразу. Не для каждого отдельного найденного идентификатора в отдельности.

java.lang.AssertionError: 1 expectation failed.
JSON path data.status.id doesn't match.
Expected: 0
  Actual: [0, 0, 0]

Как я могу проверить его, не извлекая данные ответа в Список, а затем проверить его через foreach или что-то подобное?

int statusNeeded = 0;
            List<int> idsList = given().
                     get(Endpoints.GetCampaigns).
                 then().
                     extract().body().jsonPath().getList("data.status.id");

    for (int statusId: idsList)
    if(!statusNeeded.equals(statusId)) Assert.fail("Some id is not " + statusNeeded);

Ответы [ 2 ]

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

Вы можете следовать следующему подходу

String res = given().when().get("http://localhost:3000/posts/CtQy1bt").then().log().all().extract().response().asString();

JsonPath js = new JsonPath(res);

int Count = js.get("data.size()");

for (int i=0;i<Count;i++) {
    int value = js.get("data["+i+"].status.id");
    Assert.assertEquals(value, 0);
}

Я использовал JsonPath здесь и использовал для l oop, чтобы перебрать массив данных []. Status.id.

Утвердите его в соответствии с ожидаемым значением, равным 0 в соответствии с вашим требованием

Если значение для status.id не равно 0, тогда утверждение не будет выполнено - пример ниже

{
    "data": [
        {
            "id": 1,
            "status": {
                "id": 0
            }
        },
        {
            "id": 2,
            "status": {
                "id": 5
            }
        },
        {
            "id": 3,
            "status": {
                "id": 0
            }
        }
    ],
    "id": "nmBlS8t"
}
Exception in thread "main" java.lang.AssertionError: expected [0] but found [5]
    at org.testng.Assert.fail(Assert.java:97)
    at org.testng.Assert.assertEqualsImpl(Assert.java:136)
    at org.testng.Assert.assertEquals(Assert.java:118)
    at org.testng.Assert.assertEquals(Assert.java:839)
    at org.testng.Assert.assertEquals(Assert.java:849)
    at Stack5.main(Stack5.java:25)
0 голосов
/ 20 апреля 2020

К сожалению, вы не описываете структуру вашего вывода JSON. Итак, я вынужден угадать. Почему бы тебе не попробовать?

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