Использовать JSONAssert для части JSON с RESTAssured - PullRequest
0 голосов
/ 25 июня 2018

Я могу получить JSON из службы, используя RESTAssured.

Я хотел бы использовать возможность JSONPath для извлечения JSON, а затем сравнить его с помощью JSONAssert.

Вот мой пример:

@Test
public void doAPITestExample() throws JSONException {
    // retrieve JSON from service
    Response response = RestAssured.given().get("http://localhost:8081/mockservice");
    response.then().assertThat().statusCode(200);

    String body = response.getBody().asString();
    System.out.println("Body:" + body);
    /*
        {"datetime": "2018-06-21 17:48:07.488384", "data": [{"foo": "bar"}, {"test": "this is test data"}]}
    */

    // able to compare entire body with JSONAssert, strict=false
    Object data = response.then().extract().path("data");
    System.out.println("Response data:");
    System.out.println(data.getClass()); // class java.util.ArrayList
    System.out.println(data.toString());

    // JSONAssert data with strict=false
    String expectedJSON = "{\"data\":[{\"foo\": \"bar\"}, {\"test\": \"this is test data\"}]}";
    JSONAssert.assertEquals(expectedJSON, response.getBody().asString(), false);

    // How do I extract JSON with JSONPath, use JSONAssert together?
}

Подход 1 - использование JSONPath для получения JSONObject

Как мне заставить JSONPath вернуть JSONObject, который может использоваться JSONAssert?

В примере кода:

Object data = response.then().extract().path("data");

Возвращает java.util.ArrayList. Как это можно использовать с JSONAssert для сравнения с ожидаемым JSON?

Подход 2 - анализировать извлеченные данные с помощью JSONParser

Если я сделаю data.toString(), возвращается строка, которую невозможно проанализировать из-за отсутствия обработки кавычек для строковых значений с пробелами:

String dataString = response.then().extract().path("data").toString();
JSONArray dataArray = (JSONArray) JSONParser.parseJSON(dataString);

Результат:

org.json.JSONException: Unterminated object at character 24 of [{foo=bar}, {test=this is test data}]

Подход 3 - Использование проверки схемы JSON

Можно ли извлечь из JSON только свойство data и запустить его для схемы JSON только в этой части?

Примечание: весь возвращаемый JSON довольно большой. Я просто хочу проверить свойство data из него.

Какой пример выполнения проверки схемы JSON будет искать только свойство data из JSON?

Спасибо;

1 Ответ

0 голосов
/ 25 июня 2018

Вы можете использовать метод jsonPath в своем объекте ответа.

Пример:

// this will return bar as per your example response.
String foo = response.jsonPath ().getString ("data[0].foo"); 

Для получения дополнительной информации о проверке пути JSon здесь .

...