Bruno
Introduction
Tester une application est très important. Même si au début d’un développement, il peut sembler superflu de créer des tests, ils s’avèrent être très pratiques quand le code se complexifie. En effet, si vous avez des dizaines de fonctionnalités à tester, les faire à la main risque de vous prendre beaucoup de temps. En automatisant les tests, vous serez capables de voir rapidement si un changement dans le code a modifié le comportement de votre application.
Pré-requis
Ce laboratoire s'appuie sur le laboratoire précédent. Reprenez le code et modifiez-le directement (ou faites une copie si vous désirez garder une copie de chaque laboratoire.)
Tests dans Bruno
Il existe différents types de tests exécutables à différents niveaux. Dans ce laboratoire, nous allons faire les tests au niveau de l’API. Nous souhaitons voir si à une requête précise, nous recevons la bonne réponse. L’avantage de ce type de tests est justement de pouvoir tester le comportement de l’API sans s’intéresser à son implémentation. Donc si les tests sont bons, ils permettront de tester une API réalisée en NodeJS, Python, Java, Ruby, etc.
Bruno permet de réaliser des tests pour chaque réponse de l’API. Pour cela, il faut aller dans l’onglet "Assert"/"Tests" et écrire les tests que l’on souhaite. Un "bon" test doit concerner un petit comportement de l’API. Par exemple, si on souhaite tester que l’API renvoie un bon objet en JSON avec le bon code d’erreur, on aura tendance à faire deux tests distincts :
- Test pour le code de réponse
- Test pour vérifier que le JSON est celui attendu

Dans Bruno, un test est une fonction pm.test() avec deux arguments : le premier qui correspond à la description du test (ce qu’il vérifie) et ensuite une autre fonction qui permet de faire la vérification.
Il faut savoir qu’il existe des "snippets". Il s’agit de code déjà réalisé et souvent très commun (comme la vérification du code de la réponse).
Ils sont très pratiques et peuvent même être utilisés pour des tests similaires (par exemple un code de réponse différent de 200).
Bruno utilise la syntaxe de la librairie ChaiJS BDD.
Il vous est conseillé de regarder la documentation pour comprendre comment fonctionne la syntaxe et quelles fonctions utiliser selon vos tests.
Par exemple : equal utilise === pour les vérifications, ce qui ne fonctionne pas pour la comparaison d’objets.
Dans ce cas, il faudra plutôt utiliser eql
Pour faire un test, vous pouvez utiliser les tests "préfaits" comme equal qui permettent de réaliser un test simple rapidement.
Si le test se révèle être plus compliqué, il faudra utiliser les expect.
La fonction expect prend la valeur à tester et vous pourrez utiliser une fonction de test (equal, eql, etc) pour vérifier que la valeur dans expect corresponde bien à celle dans la fonction de test.
Dernière chose, vous remarquerez que Bruno réalise ses tests en JavaScript.
Il est donc tout à fait possible de faire des fonctions, créer des variables, etc.
Il existe quelques fonctions propres à Bruno. Par exemple: pm.response.json() qui transforme le corps de la réponse en un objet utilisable en JavaScript.
Test avec identification
Pour l’identification, les choses deviennent un peu plus compliquées. En effet, il faut envoyer les logins à l’API, réceptionner le JWT, le stocker et le réutiliser entre les requêtes. Heureusement, Bruno résout le problème avec les variables d’environnement. Ces variables ont l’avantage d’être créées par des requêtes et utilisables par d’autres.
Ces variables sont utilisables même dans d ’autres parties de Bruno (par exemple dans la partie Authorization), ce qui les rend très pratiques !
Par exemple, dans un test qui vérifie que le JWT est bon, on met la variable d’environnement jwt avec la valeur Y.

Dans Bruno, nous pouvons créer des variables avant ou après que la requête a eu une réponse. Dans notre cas, nous souhaitons sauvegarder le JWT après l'avoir reçu de l'API (ce qui explique que nous créons la variable dans la partie Post Reponse)
Par la suite, on peut utiliser cette variable dans Bruno en indiquant le nom de la variable comme ceci : {{ nomVariable }}.
Réalisation des tests
Pour créer les tests, et surtout les sauvegarder, vous devez créer une collection. Cette collection sert uniquement à contenir vos requêtes avec les tests associées. Il est même possible de créer des dossiers pour structurer l’ensemble des requêtes en groupes. Pour créer une collection, cliquer sur "..." à gauche et ensuite "Create Collection".

En faisant un clic droit sur la collection ou un dossier, vous pouvez ajouter des requêtes. Pour créer les tests de votre requête, il vous suffit de cliquer sur l’onglet "Assert"/"Tests" de votre requête. N’oubliez pas que vous pouvez créer plusieurs tests pour une même requête !
Quand choisir Assert ou Tests ?
Assertconcerne les tests simples (comparaison de valeur): par exemple, le status code de la réponse doit être 200.Testconcerne les tests complexes: par exemple, récupérer la réponse en format JSON et vérifie que l'objet a bien un champidqui vaut 3.
Fonctionnement des tests
Dans Bruno, vous avez deux possibilités pour les tests. Soit, vous les faites fonctionner un par un (ce qui est pratique pour tester les tests), soit vous exécutez tous les tests de la collection (pratique pour voir si un changement a déréglé des fonctionnalités de votre API). Pour la première option, il suffit d’effectuer la requête et les tests seront automatiquement faits. Pour la seconde option, vous pouvez demander d’effectuer tous les tests de la collection via l’interface graphique :
Pour exporter votre collection, il suffit de partager le dossier contenant les tests. En effet, Bruno écrit l'ensemble des informations (requêtes, tests, variables d'environnement) dans des fichiers qu'il vous suffit de transférer (zip, git, etc) pour que vos collègues puissent profiter de votre travail.
Conclusion
Bruno est un outil très pratique pour construire des requêtes, mais aussi pour tester son API. En effet, il permet de facilement créer les tests au niveau de l’API et de les réaliser tout aussi facilement. De plus, il est possible d’exporter les tests et les variables d’environnement pour que votre partenaire puisse les récupérer simplement. Vous êtes dorénavant capables d’écrire des tests corrects pour vérifier les fonctionnalités de votre application.