Tutoriel REST Assured pour les tests d'automatisation des API (exemple)

Qu’est-ce que Rassurez-vous ?

Repos assuré vous permet de tester les API REST à l'aide des bibliothèques Java et s'intègre bien à Maven. Il dispose de techniques de correspondance très efficaces, donc affirmer les résultats attendus est également assez simple. Rest Assured dispose de méthodes pour récupérer les données de presque toutes les parties de la demande et de la réponse, quelle que soit la manière dont elles sont fournies.plex les structures JSON le sont.

Pour la communauté des tests, les tests d’automatisation des API sont encore nouveaux et de niche. Le JSONcomplexLes villes gardent les tests d'API inexplorés. Mais cela ne le rend pas moins important dans le processus de test. Le framework Rest Assured.io l'a rendu très simple en utilisant les bases de Java, ce qui en fait une chose très souhaitable à apprendre.

Pourquoi avoir besoin de Rest-Assuré ?

Imaginez que vous ouvrez votre vue Google Map et recherchez un endroit où vous souhaitez aller, vous voyez immédiatement des restaurants à proximité, vous voyez des options pour les déplacements domicile-travail ; auprès de certains grands prestataires de voyages et découvrez de nombreuses options à portée de main. Nous savons tous que ce ne sont pas des produits Google, alors comment Google parvient-il à le montrer. Ils utilisent les API exposées de ces fournisseurs. Désormais, si l'on vous demande de tester ce type de configuration, avant même que l'interface utilisateur ne soit créée ou en cours de développement, tester les API devient extrêmement important et les tester à plusieurs reprises, avec différentes combinaisons de données, en fait un cas très approprié pour l'automatisation.


Auparavant, nous utilisions des langages dynamiques tels que groovy, ruby ​​pour y parvenir, et c'était un véritable défi. Par conséquent, les tests API n’ont pas été explorés par les tests fonctionnels.

Mais en utilisant Rest Assured, les tests d'automatisation des API, l'envoi de requêtes https simples avec des personnalisations conviviales est simple si l'on a une connaissance de base de Java. Il est nécessaire pour comprendre les tests d'API et les tests d'intégration, mais postez que l'automatisation Rest Assured donne une très bonne confiance sur le backend tandis que les tests front-end peuvent uniquement se concentrer sur l'interface utilisateur et les opérations côté client. Rest Assured est une source open source avec de nombreuses méthodes et bibliothèques supplémentaires ajoutées, ce qui en fait un excellent choix pour l'automatisation des API.

Comment configurer Rest Assured.io avec Eclipse

Étape 1) Installez Java. Référez-vous à ceci guide

Étape 2) Téléchargez un IDE pour commencer : eclipse

Étape 3) Installez Maven et configurez votre eclipse. Référer ici.

Configuration Soyez assuré

  1. Créez un projet Maven dans votre IDE. Nous utilisons Intellij, mais vous obtiendrez une structure similaire sur n'importe quel IDE que vous utilisez.
  2. Ouvrez votre POM.xml

Structure du projet

Pour Rest Assured.io : Pour les utilisateurs de la version Java < 9 :

Ajoutez la dépendance ci-dessous à votre POM.xml :

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Pour Rest Assured.io : Pour les utilisateurs de Java version 9+ :

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Dépannage:

Si vous voyez des erreurs et que vous ne savez pas si les dépendances ont bien été téléchargées,

  1. Effectuez un build Maven pour importer toutes les dépendances, encore une fois vous trouverez de l'aide sur la configuration de Maven sur guru99.
  2. Pourtant, vous voyez des erreurs, puis effectuez un nettoyage maven suivi d'une installation maven, et il devrait être construit sans aucune erreur.
  3. Vous pouvez ajouter les lignes ci-dessous dans votre classe Java et voir qu'aucune erreur de compilation n'est présente.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Premier script simple Rassurez-vous

syntaxe:

La syntaxe de Rest Assured.io est la plus belle partie, car elle ressemble beaucoup à BDD et est compréhensible.

Given(). 
        param("x", "y"). 
        header("z", "w").
when().
Method().
Then(). 
        statusCode(XXX).
        body("x, ”y", equalTo("z"));

Explication:

Code Explication
Donné() Mot-clé 'Given', vous permet de définir un arrière-plan, ici, vous transmettez les en-têtes de requête, les paramètres de requête et de chemin, le corps, les cookies. Ceci est facultatif si ces éléments ne sont pas nécessaires dans la demande
Quand() Le mot-clé « quand » marque la prémisse de votre scénario. Par exemple, « quand » vous recevez/postez/mettez quelque chose, faites autre chose.
Méthode() Remplacez-le par l'une des opérations CRUD (get/post/put/delete)
Alors() Vos conditions d'assertion et de matcher vont ici

Maintenant que vous avez la configuration et quelques informations sur la syntaxe, créons notre premier test simple. Ce n'est pas grave si jusqu'à présent la structure vous semble nouvelle, au fur et à mesure que vous codez et interprétez chaque ligne, vous comprendrez.

Qu'allez-vous chercher ?

Ouvrez votre navigateur et appuyez sur – http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Assurez-vous de voir quelque chose comme ci-dessous.

Si vous obtenez une erreur sur le navigateur lorsque vous essayez d'obtenir une réponse à la demande,

  1. Vérifiez si vous avez utilisé Https ou Http. Votre navigateur peut avoir des paramètres pour ne pas ouvrir de sites Web non sécurisés.
  2. Vérifiez si un proxy ou un pare-feu empêche votre navigateur d'ouvrir des sites Web.

*Notes – vous n’avez utilisé ici aucun en-tête, aucun corps et aucun cookie. Il s'agissait d'une URL et vous obtenez également du contenu de l'API et ne publiez ni ne mettez à jour de contenu existant, ce qui en fait un appel GET. N'oubliez pas cela pour mieux comprendre notre premier test.

L'objectif de votre test :

Le but du script est d'imprimer la même sortie sur votre console IDE que celle que vous avez reçue sur le navigateur via Rest Assured.

Codons cela avec les étapes ci-dessous :

Obtenir la réponse Corps

Étape 1) Créez une classe nommée « myFirstRestAssuredClass »

Étape 2) Créez une méthode appelée « getResponseBody »

Étape 3) Semblable à la structure apprise plus tôt, quand et ensuite, tapez le code ci-dessous

donné(). -> Aucun en-tête requis, aucune requête ou paramètre de chemin.

quand(). -> Aucune configuration de condition spécifique

obtenir('http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). ->seule l'url doit être fournie

alors(). -> Aucune assertion spécifique requise

enregistrer(). all() -> Une fois que toute la réponse est récupérée, enregistrez la réponse, les en-têtes, essentiellement tout ce que la requête vous renvoie.

public static void getResponseBody(){
   given().when().get("http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();
 
}

Notez maintenant que l'URL utilisée est longue et moins lisible, si vous regardez attentivement, vous remarquerez que 3 paramètres de requête sont utilisés qui sont

  1. N ° de client
  2. Mot de Passe
  3. N ° de compte

Rassurez-vous, cela nous aide à transmettre chaque partie (requête, chemin, paramètre d'en-tête) séparément, ce qui rend le code plus lisible et plus facile à maintenir. De plus, nous pouvons paramétrer les données d'un fichier externe selon les besoins.

Pour utiliser les paramètres de requête, nous revenons à notre définition de la syntaxe et voyons que tous sont transmis dans le cadre de donné.

public static void getResponseBody(){
 
   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**Notez que nous avons utilisé « corps » au lieu de « tout » ; cela nous aide à extraire uniquement le corps de la réponse.

Sortie :

Sortie pour getResponseBody

Obtenir le code d'état de la réponse

La prochaine méthode que nous écrirons consistera à obtenir le code d'état et également à mettre une assertion pour le valider.

Étape 1) Créez une méthode appelée getResponseStatus()

Étape 2) Utilisez la même structure de requête que celle utilisée ci-dessus. Copiez-le et collez-le.

Étape 3) Au lieu de l'enregistrer, nous utilisons la méthode intégrée 'getStatusCode' de Rest Assured pour récupérer la valeur du code d'état.

Étape 4) Afin d'affirmer que votre code de statut est 200, nous utilisons les mots-clés – assertThat().statusCode(expectedCode)

**Remarque – L'URL est une variable utilisée par souci de simplicité. L'URL contient l'intégralité de l'URL de la demande d'API

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

Sortie :

Sortie pour getResponseStatus

Besoin commercial

L'une des règles de base de l'automatisation est que nous devons mettre en place des points de contrôle pour que le test ne se déroule que si toutes les conditions requises sont remplies. Dans les tests API, la validation la plus élémentaire consiste à vérifier si le code d'état de la demande est au format 2XX.

Le code complet, jusqu'à présent :

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

     getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

* Remarque:

  1. 200 est une réponse réussie pour ce scénario. Parfois, vous avez également besoin que la demande échoue, et vous pouvez alors utiliser 4XX ou 5XX. Essayez de modifier le code d'état en fournissant des paramètres non valides et vérifiez.
  2. Lorsque nous affirmons une condition, il n'y aura pas d'impression sur la console sauf en cas d'erreur.

Script pour récupérer différentes parties d'une réponse

La récupération du corps de la réponse et du code d'état de la réponse est déjà couverte dans le segment ci-dessus. Il convient de noter que pour récupérer différentes parties de la réponse, le mot-clé « extrait » est très important.

En-tête

Rest Assured est un langage très simple, et la récupération des en-têtes est tout aussi simple. Le nom de la méthode est headers(). Comme précédemment, nous allons créer une méthode autonome pour faire de même.

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

Veuillez noter que 'given().when()' est ignoré ici et que la ligne de code commence à partir de get(), car aucune condition préalable ou vérification n'est effectuée ici pour répondre à la demande et obtenir une réponse. Dans de tels cas, il est facultatif de l’utiliser.

Sortie:

Sortie pour getResponseHeader

Besoin commercial :

Plusieurs fois, vous devrez utiliser le jeton d'autorisation ou un cookie de session pour la requête ultérieure, et la plupart du temps, cestails sont renvoyés comme en-têtes de la réponse.

Temps de réponse

Pour obtenir le temps nécessaire pour récupérer la réponse du backend ou d'autres systèmes en aval, Rest Assured fournit une méthode appelée « timeIn » avec une timeUnit appropriée pour obtenir le temps nécessaire pour renvoyer la réponse.

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

Sortie :

Sortie pour getResponseTime

Besoin commercial :

Une caractéristique très importante du test des API est leur temps de réponse, afin de mesurer les performances de l'application. Notez que le temps nécessaire à votre appel peut prendre plus ou moins de temps en fonction de votre vitesse Internet, des performances de l'API à ce moment-là, de la charge du serveur et d'autres facteurs ayant un impact sur le temps.

Content-Type

Vous pouvez obtenir le type de contenu de la réponse renvoyée en utilisant la méthode « contentType () ».

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

Sortie

Sortie pour getContentType

Besoin commercial :

Parfois, l'obtention du type de contenu est essentielle pour garantir qu'il n'y a pas de failles de sécurité pour les menaces d'origine croisée ou simplement pour garantir que le contenu transmis est conforme aux normes de l'API.

Récupérer un élément JSON individuel

À partir de la réponse donnée, il vous est demandé de calculer le montant total, vous devez récupérer chaque montant et le résumer.

Étape:

Étape 1) Le champ de montant se trouve dans un tableau avec la clé « instructions » qui est à son tour dans la liste avec la clé « résultat »

Étape 2) Rassurez-vous, fournit un mécanisme pour atteindre les valeurs de l'API en utilisant le « chemin »

Étape 3) Le chemin pour atteindre les montants est « result.statements.AMOUNT ». Pensez-y comme Xpath en sélénium.

Étape 4) Récupérez tous les montants d'une collection, puis effectuez une boucle sur toutes les valeurs pour calculer la somme

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

Remarque : Étant donné que la valeur du montant est de type chaîne, nous la convertissons en entier et l'utilisons pour la sommation.

Sortie :

Sortie pour getSpecificPartOfResponse

Résumé :

  • Rest Assured est un groupe de bibliothèques Java qui nous permet d'automatiser Tests de l'API de repos
  • Rest Assured est basé sur Java et possède une connaissance du noyau Java suffit pour l'apprendre
  • Il permet de récupérer les valeurs de requête et de réponse à partir de structures JSON complexes
  • Le API La demande peut être personnalisée avec une variété d'en-têtes, de requêtes, de paramètres de chemin et toute session ou cookie à définir.
  • Il permet de définir des déclarations et des conditions d'assertion.
  • Bien que Rest Assured soit très utile lorsque la réponse est de type JSON, ses méthodes peuvent ne pas fonctionner de manière transparente si le type de contenu est HTML ou texte brut.