Hur man analyserar JSON-svar med REST-säker

I denna API-testhandledning tittar vi på hur man analyserar JSON-svar och extraherar information med hjälp av det REST-säkra biblioteket.

När du testar ett API gör du vanligtvis en begäran till en resurs (t.ex. via en GET- eller POST-begäran). Servern kommer tillbaka med ett svar och sedan gör du några påståenden om svaret.



Hur man analyserar JSON-svar

För den här handledningen kommer jag att använda JSONPlaceholder vilket är ett falskt REST API för testning och prototyping. JSONPlaceholder är en gratis REST-tjänst online som du kan använda när du behöver falska data.


Mer specifikt kommer jag att använda användarnas slutpunkt jsonplaceholder .

Begäran och svar

När vi gör en GET-begäran till ovanstående resurs får vi ett JSON-svar som innehåller en lista över användare. Denna lista representeras som en JSON Array. Varje matris har en struktur så här:


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

Därför kommer det i hela svaret att finnas tio poster i matrisen, som alla har samma JSON-struktur, men med olika värden.

Relaterad:

Låt oss börja med att analysera och extrahera några värden från JSON.

Det första testet skulle vanligtvis vara att räkna antalet poster i matrisen, så låt oss börja med det.


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

Resultatet av ovanstående samtal skulle skriva ut 10. Notera $ notation vilket betyder rotelementet.

Analysera JSON-arrays och listor

I exemplet ovan, om vi ville få användarnamnet för alla poster, kan vi använda:

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

Detta skulle skriva ut matrisen som:

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

Om vi ​​sedan vill få användarnamnet för den första posten kan vi använda:


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

Detta skulle skriva ut det första användarnamnet:

Bret

Med hjälp av en lista kan vi använda:

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

Detta skulle skriva ut det första användarnamnet:

Bret

Analysera JSON ArrayList och HashMap

Om man tittar på ovanstående JSON-struktur är företaget faktiskt en karta. Om vi ​​bara hade en post kunde vi använda:


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

som skulle skriva ut:

Romaguera-Crona

Men om svaret returnerar en matris och vi vill extrahera det första företagsnamnet kan vi använda:

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

Alternativt kan vi använda:

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

som båda kommer att skriva ut:


Romaguera-Crona