Comment analyser la réponse JSON avec la garantie REST

Dans ce didacticiel de test d'API, nous examinons comment analyser la réponse JSON et extraire des informations à l'aide de la bibliothèque assurée par REST.

Lors du test d'une API, vous faites généralement une requête à une ressource (par exemple via une requête GET ou POST). Le serveur revient avec une réponse et vous faites ensuite quelques affirmations sur la réponse.



Comment analyser la réponse JSON

Pour ce tutoriel, j'utiliserai JSONPlaceholder qui est une fausse API REST en ligne pour les tests et le prototypage. JSONPlaceholder est un service REST en ligne gratuit que vous pouvez utiliser chaque fois que vous avez besoin de fausses données.


Plus précisément, j'utiliserai le point de terminaison des utilisateurs jsonplaceholder .

Demande et réponse

Lorsque nous faisons une requête GET à la ressource ci-dessus, nous obtenons une réponse JSON qui contient une liste d'utilisateurs. Cette liste est représentée sous la forme d'un tableau JSON. Chaque tableau a une structure comme celle-ci:


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

Par conséquent, dans la réponse complète, il y aura dix enregistrements dans le tableau, chacun ayant la même structure JSON, mais avec des valeurs différentes.

En rapport:

Maintenant, commençons par analyser et extraire certaines valeurs du JSON.

Le premier test consiste généralement à compter le nombre d’enregistrements dans le tableau, alors commençons par cela.


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

Le résultat de l'appel ci-dessus afficherait 10. Notez le $ notation qui signifie l'élément racine.

Analyse des tableaux et listes JSON

Dans l'exemple ci-dessus, si nous voulions obtenir le nom d'utilisateur de toutes les entrées, nous pourrions utiliser:

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

Cela imprimerait le tableau comme:

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

Si nous voulons ensuite obtenir le nom d'utilisateur de la première entrée, nous pourrions utiliser:


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

Cela imprimerait le premier nom d'utilisateur:

Bret

En utilisant une liste, nous pouvons utiliser:

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

Cela imprimerait le premier nom d'utilisateur:

Bret

Analyse JSON ArrayList et HashMap

En regardant la structure JSON ci-dessus, l'entreprise est en fait une carte. Si nous n'avions qu'un seul enregistrement, nous pourrions utiliser:


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

qui imprimerait:

Romaguera-Crona

Mais si la réponse renvoie un tableau et que nous voulons extraire le premier nom de la société, nous pourrions utiliser:

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

Alternativement, nous pourrions utiliser:

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

qui imprimeront tous les deux:


Romaguera-Crona