TP Qualité de dev.
S. Salva

Test d'API REST


1. Objectifs

Tester des services Web
Utiliser SoapUI (Soap et Rest)
Utiliser le framework de test Rest-assured

2. Outil de test SoapUI

A

Utilisons SoapUI pour tester un service.
Téléchargez ce service Springboot et lancez le (cmd : mvn spring-boot:run ). Les routes sont les suivantes : http://localhost:8080/books/, /books/{isbn}, /postbook
  1. Créez un projet soapui
  2. Ajouter les routes que vous souhaitez tester
  3. Puis créer une test suite, un test case, que vous pourrez faire en utilisant les requètes précédentes. N'oubliez pas d'ajouter des assertions. C'est du no code ici
Vous devriez obtenir ce type d'écran
soapui



Dans SoapUI, faites les test cases suivants pour :

B

Prenons le service Web Rest http://dummy.restapiexample.com/.
Utilisez SoapUI pour
  1. créer un employé (http://dummy.restapiexample.com/api/v1/create), assertion sur le terme success dans la réponse(utilisez une assertion JSONPATH match)
  2. vérifier que la ressource http://dummy.restapiexample.com/api/v1/employees retourne votre employé 
  3. supprimer (assertion sur le terme succes dans la réponse)
Les réponses retournées sont en JSON. Pour faire des assertions avec JSONPATH vous aurez besoin de quelques notions sur la grammaire JSON

3. Famework Rest-assured

Rest-assured est un framework dédié au test de service Rest. Il est très simple d'accès. Notez qu'il est aussi possible de Mocker des services lorsque vous êtes dans le cas d'un service composite.

Doc ici
Example qui utilise le patter Given When Then:

 @Test
 public void test1() {
//pas necessaire ici
//given().header("MyHeader", "Something").and(). ..
//given().headers("MyHeader", "Something", "MyOtherHeader", "SomethingElse").and(). ..
        
// http://localhost:8080 par defaut

when().
            get("/books/{id}", 1).
    then().
            statusCode(200).
            body("name", equalTo("Fondation"));

}

Il la dépendence suivante :

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

et certainement celle-ci:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.10.0</version>
    <scope>test</scope>
</dependency>

Reprenons le premier Service de gestion de livre.


A

En vous aidant du code ci-dessus, faites un test case (junit) pour vérifier que le service retourne le livre fondation avec un status 200

B

Faites un second test qui
ajoute un livre avec la méthode post /postbook qui prend un livre au format json {name, auteur}) et qui vérifie que le status est 200
vérife avec l'appel get /books que ce livre a été ajouté à la BD.