Kako raščlaniti JSON odgovor sa REST-assured

U ovom vodiču za API testiranje, pogledat ćemo kako raščlaniti JSON odgovor i izvući podatke pomoću REST-ovjerene knjižnice.

Kada testirate API, obično podnosite zahtjev resursu (npr. Putem zahtjeva GET ili POST). Poslužitelj se vraća s odgovorom i tada dajete neke tvrdnje o odgovoru.

Kako raščlaniti JSON odgovor

Za ovaj tutorial koristit ću se JSONPlaceholder što je lažni internetski REST API za testiranje i izradu prototipova. JSONPlaceholder je besplatna internetska REST usluga koju možete koristiti kad god su vam potrebni neki lažni podaci.

Točnije, koristit ću korisničku krajnju točku jsonplaceholder .

Zahtjev i odgovor

Kada podnesemo GET zahtjev gore navedenom resursu, dobivamo JSON odgovor koji sadrži popis korisnika. Ovaj je popis predstavljen kao JSON niz. Svaki niz ima strukturu poput ove:

{
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'
} }

Stoga će u punom odgovoru u polju biti deset zapisa, od kojih svaki ima istu JSON strukturu, ali s različitim vrijednostima.

Povezano:

Krenimo sada sa raščlanjivanjem i izdvajanjem nekih vrijednosti iz JSON-a.

Prvi bi test obično bio brojanje broja zapisa u polju, pa krenimo s tim.

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());
} }

Rezultat gornjeg poziva ispisat će 10. Napomena $ notacija koja znači korijenski element.

Raščlanjivanje JSON nizova i popisa

U gornjem primjeru, ako smo željeli dobiti korisničko ime svih unosa, mogli bismo koristiti:

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

Ovo bi ispisalo niz poput:

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

Ako tada želimo dobiti korisničko ime prvog unosa, mogli bismo koristiti:

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

Ovo bi ispisalo prvo korisničko ime:

Bret

Korištenjem Popisa možemo koristiti:

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

Ovo bi ispisalo prvo korisničko ime:

Bret

Raščlanjivanje JSON ArrayList i HashMap

Gledajući gornju JSON strukturu, tvrtka je zapravo karta. Da imamo samo jedan zapis, mogli bismo koristiti:

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

koji bi tiskao:

Romaguera-Crona

Ali ako odgovor vrati niz i želimo izvući prvo ime tvrtke, mogli bismo koristiti:

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

Alternativno bismo mogli koristiti:

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

oboje će ispisati:

Romaguera-Crona