4-6 Test de la modification (Modifier projet)
Pour tester une modification, on doit être dans une situation contrôlée, c'est-à-dire que nous connaissons l'état initial de la ressource à tester (un projet avec un nom précis, par exemple) et que suite à la modification, nous pouvons vérifier que l'objet a changé.
La meilleure façon de contrôler l'environnement est de le créer!
Ce qu'on doit faire est essentiellement de:
- Créer une entrée avec certains attributs
- Garder une référence vers cette entrée (son identifiant)
- Modifier un ou plusieurs attributs de la nouvelle entrée
- Vérifier que le retour correspond bien l'entrée modifiée
Nous savons comment créer une nouvelle entrée via l'API, mais pas comment garder en mémoire l'identifiant de cette dernière pour ensuite y faire référence et la modifier.
Nous allons utiliser une pratique qui en développement de tests plus officiels n'est pas idéale, c'est-à-dire que nous devrons assumer que le test de modification soit exécuté après le test de création. Normalement, les tests doivent pouvoir être exécutés dans n'importe quel ordre. Nous ne sommes toutefois pas dans un contexte de test unitaire de code, nous testons une API via de réelles requêtes.
Créer une nouvelle variable pour la référence au nouveau projet
Postman permet de créer des variables au niveau de la collection pour y stocker de l'information afin d'y faire référence plus tard. Nous avons déjà créé une variable baseUrl
pour l'URL de base de l'API. Faisons de même pour conserver la référence au nouveau projet créé via la requête POST
.
- Allez dans la section
Variables
de votreCollection
- Ajouter une nouvelle variable
nouveauProjetId
Conserver la référence
Dans l'onglet script de la requête de création, ajoutez à la fin, en dehors des fonctions de test, un bloc de code pour sauvegarder le nouvel identifiant.
pm.test("La réponse est un succès et contient du JSON", function () {
pm.response.to.be.success;
pm.response.to.be.withBody;
pm.response.to.be.json;
});
pm.test("La réponse est de type objet et contient les propriétés attendues", function () {
let jsonData = pm.response.json();
pm.expect(jsonData).to.be.an('object');
pm.expect(jsonData).to.have.property('nom');
pm.expect(jsonData).to.have.property('description');
pm.expect(jsonData.nom).to.equal("Nouveau projet");
pm.expect(jsonData.description).to.equal("Un nouveau projet créé par API!");
});
// Sauvegarder l'identifiant du nouveau projet
let jsonData = pm.response.json();
pm.collectionVariables.set("nouveauProjetId", jsonData.id);
Comme vous pouvez le remarquer, on enregistre dans la variable nouveauProjetId
, le id
du nouveau projet en récupérant ce dernier de l'objet jsonData
.
pm.collectionVariables.set
permets d'assigner une valeur à une variable Postman.
Le code est exécuté de façon séquentielle. Dès qu'un test échoue, l'exécution est arrêtée. Cela veut dire que la sauvegarde sera effectuée seulement si les tests passent et que la requête a fonctionnée.
Test
Vous pouvez essayer d'exécuter la requête manuellement, vous verrez qu'une valeur sera assignée maintenant à la variable.
Modifier la requête de modification
URL pour ce test:
PATCH
{{baseUrl}}/projets?id=eq.{{nouveauProjetId}}
On peut modifier la requête de modification pour qu'elle utilise l'identifiant du projet nouvellement créé, plutôt que d'utiliser un id fixe. Il est possible dans les URLs de requête d'utiliser des variables! 😊
Donc, plutôt que {{baseUrl}}/projets?id=eq.1
, on peut faire référence à la variable nouveauProjetId
: {{baseUrl}}/projets?id=eq.{{nouveauProjetId}}
- Vous pouvez utiliser l'autocomplétion de Postman au niveau de l'URL de la requête, en tapant
{
pour écrire l'URL du test et référencer la variablenouveauProjetId
. En effet, l'URL de modification sera dynamique et utilisera la variable enregistrée par le test de création. - Vous devriez avoir comme URL de requête:
PATCH
{{baseUrl}}/projets?id=eq.{{nouveauProjetId}}
- Modifiez le
Body
de la requête afin qu'il envoie un nom et/ou une description modifiée (par rapport à ce qui a été créé lors de l'opération de création). Tel que:{
"nom": "Nouveau projet modifié",
"description": "Un nouveau projet modifié par API!"
}
Tester que le retour de la requête est bien le texte modifié
Dans l'onglet Tests
, il est possible de vérifier que le nom a été modifié et qu'il correspond bien à celui modifié!
Le test est très similaire à la création pour cette portion
/**
* Seulement le test de validation des propritétés modifiées est montré,
* vous pourriez avoir besoin d'autres tests...
*/
pm.test("La réponse est de type objet et contient les propriétés modifiées", function () {
let jsonData = pm.response.json();
pm.expect(jsonData).to.be.an('object');
pm.expect(jsonData).to.have.property('nom');
pm.expect(jsonData).to.have.property('description');
pm.expect(jsonData.nom).to.equal("Nouveau projet modifié");
pm.expect(jsonData.description).to.equal("Un nouveau projet modifié par API!");
});
L'exemple montré pour le test est simplement pour montrer la vérification des propriétés modifiées.
Exécuter le test
Pour exécuter le test:
- Exécuter manuellement la requête de création. Cela sauvegardera dans la variable
nouveauProjetId
l'identifiant du nouveau projet. - Exécuter la requête de modification qui utilisera la variable
nouveauProjetId
comme base.
Le tout devrait fonctionner! 🎉