Как да анализирате 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