Как анализировать ответ JSON с помощью REST-гарантированного

В этом руководстве по тестированию API мы рассмотрим, как анализировать ответ JSON и извлекать информацию с помощью библиотеки с гарантированным REST.

При тестировании API вы обычно делаете запрос к ресурсу (например, через запрос GET или POST). Сервер возвращается с ответом, а затем вы выполняете некоторые утверждения для ответа.



Как разобрать ответ JSON

В этом уроке я буду использовать JSONPlaceholder который представляет собой поддельный онлайн-интерфейс REST API для тестирования и прототипирования. JSONPlaceholder - это бесплатная онлайн-служба REST, которую вы можете использовать всякий раз, когда вам нужны поддельные данные.


В частности, я буду использовать конечную точку пользователя jsonplaceholder .

Запрос и ответ

Когда мы делаем запрос GET к указанному выше ресурсу, мы получаем ответ JSON, который содержит список пользователей. Этот список представлен в виде массива JSON. Каждый массив имеет такую ​​структуру:


{
id: 1,
name: 'Leanne Graham',
username: 'Bret',
email: 'Sincere@april.biz',
address: {
street: 'Kulas Light',
suite: 'Apt. 556',
city: 'Gwenborough',
zipcode: '92998-3874',
geo: {

lat: '-37.3159',

lng: '81.1496'
}
},
phone: '1-770-736-8031 x56442',
website: 'hildegard.org',
company: {
name: 'Romaguera-Crona',
catchPhrase: 'Multi-layered client-server neural-net',
bs: 'harness real-time e-markets'
} }

Следовательно, в полном ответе в массиве будет десять записей, каждая из которых будет иметь одинаковую структуру JSON, но с разными значениями.

Связанный:

Теперь давайте начнем с анализа и извлечения некоторых значений из JSON.

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


import io.restassured.RestAssured; import io.restassured.http.ContentType; import io.restassured.parsing.Parser; import io.restassured.response.Response; import java.util.List; import static io.restassured.RestAssured.given; public class RestTest {
public static Response doGetRequest(String endpoint) {
RestAssured.defaultParser = Parser.JSON;

return

given().headers('Content-Type', ContentType.JSON, 'Accept', ContentType.JSON).


when().get(endpoint).


then().contentType(ContentType.JSON).extract().response();
}
public static void main(String[] args) {
Response response = doGetRequest('https://jsonplaceholder.typicode.com/users');

List jsonResponse = response.jsonPath().getList('$');

System.out.println(jsonResponse.size());
} }

Результатом вышеуказанного вызова будет печать 10. Обратите внимание на $ обозначение, которое означает корневой элемент.

Анализ массивов и списков JSON

В приведенном выше примере, если мы хотим получить имя пользователя для всех записей, мы могли бы использовать:

String usernames = response.jsonPath().getString('username'); System.out.println(usernames);

Это напечатает массив, например:

[Bret, Antonette, Samantha, Karianne, Kamren, Leopoldo_Corkery, Elwyn.Skiles, Maxime_Nienow, Delphine, Moriah.Stanton]

Если мы затем хотим получить имя пользователя первой записи, мы могли бы использовать:


String usernames = response.jsonPath().getString('username[0]');

Это напечатает первое имя пользователя:

Bret

Используя список, мы можем использовать:

List jsonResponse = response.jsonPath().getList('username'); System.out.println(jsonResponse.get(0));

Это напечатает первое имя пользователя:

Bret

Разбор JSON ArrayList и HashMap

Глядя на приведенную выше структуру JSON, компания на самом деле представляет собой карту. Если бы у нас была только одна запись, мы могли бы использовать:


Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/1'); Map company = response.jsonPath().getMap('company'); System.out.println(company.get('name'));

который напечатает:

Romaguera-Crona

Но если ответ возвращает массив, и мы хотим извлечь первое название компании, мы могли бы использовать:

Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); Map company = response.jsonPath().getMap('company[0]'); System.out.println(company.get('name'));

В качестве альтернативы мы могли бы использовать:

Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); List companies = response.jsonPath().getList('company'); System.out.println(companies.get(0).get('name'));

оба будут напечатаны:


Romaguera-Crona