Как я могу проверить, что JSON Array содержит определенное значение в Rest Assured? - PullRequest
0 голосов
/ 11 февраля 2020

У меня проблема с тем, что я sh проверю содержимое массива JSON. Ниже приведен ответ:

[
  {
    "airportId": "5d5448a4-f7d7-461d-8ec0-7881719cc013",
    "code": "HNL",
    "name": "Honolulu, Oahu",
    "location": {
      "longitude": -157.925,
      "latitude": 21.321667
    },
    "cityId": "7b244a1b-b2fb-4e9b-a611-3f3107f9adfc",
    "city": "Honolulu",
    "countryCode": "US",
    "themes": [
      "BEACH",
      "HISTORIC",
      "OUTDOORS",
      "ROMANTIC",
      "SHOPPING"
    ],
    "pointsOfSale": [
      "US"
    ]
  },
  {
    "airportId": "896d2041-5083-4d5d-b11b-575d388e8e6f",
    "code": "NRI",
    "name": "Shangri-la Airport",
    "location": {
      "longitude": -157.794932,
      "latitude": 21.256836
    },
    "cityId": "7b244a1b-b2fb-4e9b-a611-3f3107f9adfc",
    "city": "Honolulu",
    "countryCode": "US",
    "themes": [],
    "pointsOfSale": [
      "US"
    ]
  },
  {
    "airportId": "0bf1e80e-bf08-4a62-9f18-41328cc62fc4",
    "code": "HIK",
    "name": "Hickam AFB Airport",
    "location": {
      "longitude": -157.8583333,
      "latitude": 21.3069444
    },
    "cityId": "7b244a1b-b2fb-4e9b-a611-3f3107f9adfc",
    "city": "Honolulu",
    "countryCode": "US",
    "themes": [],
    "pointsOfSale": [
      "US"
    ]
  },
  {
    "airportId": "aed7c2eb-54ce-47c2-966f-9e2079506b9c",
    "code": "JRF",
    "name": "Kalaeloa (John Rodgers Field) Airport",
    "location": {
      "longitude": -158.0568965,
      "latitude": 21.3353909
    },
    "cityId": "438dd674-e443-466c-a62e-ce6a9c80cf86",
    "city": "Kapolei",
    "countryCode": "US",
    "themes": [],
    "pointsOfSale": [
      "US"
    ]
  }
]

Я хочу проверить, что Гонолулу, Оаху присутствует в имя узла как часть ответа. Я смог сделать это с помощью класса JsonPath и сохранить все результаты имен в списке. Тем не менее, я буду sh, чтобы сделать это с помощью тела и соответствия.

Ниже приведен код для достижения конечной точки:

public void getAirport() {
        RestAssured.baseURI="https://hotels4.p.rapidapi.com";

        Response res = given()
        .headers("X-RapidAPI-Host", "cometari-airportsfinder-v1.p.rapidapi.com", 
                "X-RapidAPI-Key", "KEY_GOES_HERE").
        queryParams("radius", "20","lng","-157.895277","lat","21.265600").
        when()
        .get("/api/airports/by-radius").
        then()
        .assertThat().statusCode(200)
        .and().header("Server", "RapidAPI-1.0.39")
        .and().body("name",Matchers.hasItems("Honolulu"))
        .and().time(Matchers.lessThan(10000l))
        .extract().response();

    }

Подход 1: Matchers.hasItems

.body("name",Matchers.hasItems("Honolulu"))

Ошибка сообщение:

JSON path name doesn't match.
Expected: (a collection containing "Honolulu")
  Actual: [Honolulu, Oahu, Shangri-la Airport, Hickam AFB Airport, Kalaeloa (John Rodgers Field) Airport]

Подход 2: Matchers.contains

.body("name",Matchers.contains("Honolulu"))

Сообщение об ошибке:

JSON path name doesn't match.
Expected: iterable containing ["Honolulu"]
  Actual: [Honolulu, Oahu, Shangri-la Airport, Hickam AFB Airport, Kalaeloa (John Rodgers Field) Airport]

Подход 3: Matchers.hasKey

.body("name",Matchers.hasKey("Honolulu"))

Сообщение об ошибке:

JSON path name doesn't match.
Expected: map containing ["Honolulu"->ANYTHING]
  Actual: [Honolulu, Oahu, Shangri-la Airport, Hickam AFB Airport, Kalaeloa (John Rodgers Field) Airport]

При замене вышеуказанные подходы работают нормально name с name[0], но я не хочу выполнять проверку с использованием индексов.

1 Ответ

0 голосов
/ 13 февраля 2020

Name Collection содержит «Гонолулу, Оаху» как одно значение.

Matchers.hasItems («Гонолулу, Оаху»)) должен работать

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