Catégories
Plugin et site web

Comment automatiser les tests d'API avec Postman – Smashing Magazine

A propos de l'auteur

Kelvin Omereshone est le directeur technique de Quru Lab. Kelvin était auparavant ingénieur Front-end chez myPadi.ng. Il est le créateur de la communauté Nuxtjs Africa et très passionné…
Plus à propos
Kelvin

Dans cet article, nous allons apprendre à écrire des tests automatisés sur des API Web avec Postman. Pour suivre ce didacticiel, vous aurez besoin d'au moins une bonne connaissance de Postman.

L'une de mes fonctionnalités préférées dans Postman est la possibilité d'écrire des tests automatisés pour mes API. Donc, si vous êtes comme moi et que vous utilisez Postman et que vous êtes fatigué de tester manuellement vos API, cet article vous montrera comment exploiter la fonctionnalité d'automatisation des tests fournie par Postman.

Si vous ne savez pas ce qu'est Postman ou si vous êtes totalement nouveau dans Postman, je vous recommanderai de consulter la page de documentation de démarrage de Postman, puis de revenir à cet article pour apprendre à automatiser le test de votre API avec Postman.

Les API ou API Web pilotent à peu près la plupart des produits numériques destinés aux utilisateurs. Cela dit, en tant que développeur backend ou front-end, pouvoir tester ces API avec facilité et plus efficacement vous permettra de progresser rapidement dans votre cycle de vie de développement.

Postman vous permet de tester manuellement vos API dans ses applications de bureau et Web. Cependant, il vous permet également d'automatiser ces tests en écrivant des assertions JavaScript sur vos points de terminaison d'API.

Pourquoi vous devriez automatiser les tests API

Les tests dans le développement de logiciels sont utilisés pour vérifier la qualité de tout logiciel. Si vous créez des API en tant que backend pour une seule application frontale ou si vous créez des API destinées à être utilisées par plusieurs services et clients, il est important que les API fonctionnent comme prévu.

La mise en place de tests API automatisés pour tester les différents points de terminaison de votre API vous aidera à détecter les bogues le plus rapidement possible.

Cela vous permettra également de vous déplacer rapidement et d'ajouter de nouvelles fonctionnalités, car vous pouvez simplement exécuter les cas de test pour voir si vous cassez quelque chose en cours de route.

Étapes pour automatiser les tests API

Lors de l'écriture de tests d'API dans Postman, j'adopte normalement une approche en quatre étapes:

  1. Tester manuellement l'API;
  2. Comprendre la réponse renvoyée par l'API;
  3. Rédiger le test automatisé;
  4. Répétez pour chaque point de terminaison sur l'API.

Pour cet article, j'ai un service Web NodeJS optimisé par SailsJS qui expose les points de terminaison suivants pour:

  • / – la maison de l'API.
  • /user/signup – Enregistre un nouvel utilisateur.
  • /user/signin – Se connecte à un utilisateur sortant.
  • /listing/new – Crée une nouvelle liste (une liste est les détails d'une propriété appartenant à l'utilisateur) pour un utilisateur existant.

J'ai créé et organisé les points de terminaison pour le service de démonstration que nous utiliserions dans cet article dans une collection Postman afin que vous puissiez rapidement importer la collection dans Postman en cliquant sur le bouton ci-dessous et suivre.

Courir en facteur

Alors, suivons mes quatre étapes pour automatiser les tests d'API dans Postman.

1. Testez l'API manuellement

Je vais ouvrir Postman et basculer vers un espace de travail que j'ai créé appelé demo qui a le postman-test-demo-service collection. Vous aurez également accès à la collection si vous l'avez importée d'en haut. Donc mon facteur ressemblerait à ceci:

postman avec la collection `postman-test-demo-service`
(Grand aperçu)

Notre premier test consiste à tester le point de terminaison domestique (/) de l'API. Je voudrais donc ouvrir la demande dans la barre latérale appelée home vous pouvez voir qu'il s'agit d'une demande Get et en appuyant simplement sur Entrée, j'enverrais une demande GET au service Web pour voir à quoi il répond. L'image ci-dessous montre cette réponse:

réponse à une requête GET
(Grand aperçu)

2. Comprendre la réponse renvoyée par l'API

Si vous suivez le long et aussi de la capture d'écran ci-dessus, vous verrez la réponse est revenue avec un code d'état de 200 OK et aussi un corps JSON avec un message propriété d'une valeur de You have reached postman test demo web service

Sachant cela, c'est la réponse attendue du / point final sur notre service, nous pouvons passer à l'étape 3 – écrire le test automatisé réel.

3. Écrivez le test automatisé

Postman est prêt à l'emploi avec un moteur d'exécution puissant basé sur Node.js, qui donne aux utilisateurs la possibilité d'écrire des scripts dans le langage JavaScript.

Dans Postman, vous ajoutez des scripts à exécuter pendant deux événements dans le flux de travail Postman:

  • Avant de faire une demande.
    Ces scripts sont appelés script de pré-requête et vous pouvez les écrire sous le Onglet Script de pré-demande.
  • Après avoir reçu une réponse à la demande que vous avez faite.
    Ces scripts sont appelés scripts de test et c'est cet ensemble de scripts qui est notre objectif dans cet article. Vous écrivez des scripts de test sous le Des tests onglet dans une demande de facteur.

L'image ci-dessous montre le Des tests onglet ouvert dans Postman:

L'image montre l'onglet Tests ouvert dans Postman
(Grand aperçu)

Si vous regardez à votre droite dans l'onglet Tests de demande déjà ouvert, vous remarquerez une liste d'extraits disponibles pour vous permettre de commencer rapidement à écrire des tests. La plupart du temps, ces extraits sont suffisants pour un certain nombre de scénarios de test. Je sélectionnerais donc le titre de l'extrait Status code: Code is 200. Cela générera le code ci-dessous dans le Tests éditeur:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

Voici également à quoi ressemblerait Postman après avoir cliqué sur cet extrait de test:

à quoi ressemblerait Postman après avoir cliqué sur un extrait de test
(Grand aperçu)

Si vous avez écrit une forme de test en JavaScript à l'aide de certains des cadres de test tels que Jest, l'extrait ci-dessus vous semblera familier. Mais laissez-moi vous expliquer: tous les scénarios ou combinaisons de test postman commencent par la fonction test () qui est exposée dans l'objet global pm (abréviation de Postman) fourni par Postman pour vous. le test La méthode prend deux arguments: le premier est la description du test qui dans notre suite de tests ci-dessus se lit comme suit: Status code is 200, le deuxième argument est une fonction de rappel. C’est dans cette fonction que vous faites vos affirmations ou vérifiez la réponse à la demande particulière en cours de test.

Vous remarquerez que nous avons une seule affirmation pour le moment, mais vous pouvez en avoir autant que vous le souhaitez. Cependant, j'aime garder les affirmations dans des tests séparés la plupart du temps.

Notre assertion ci-dessus demande simplement à Postman si le retour de réponse a un code d'état de 200. Vous pouvez voir comment il se lit comme l'anglais. Ceci est intentionnel afin de permettre à quiconque d'écrire ces tests avec facilité.

Exécution de notre test

Pour exécuter notre test, nous enverrons à nouveau une demande au point de terminaison. Seulement cette fois-ci, lorsque Postman recevra la réponse de cette demande, il exécutera vos tests. Vous trouverez ci-dessous une image montrant le test de réussite dans Postman (vous pouvez accéder au résultat du test sur le Résultats de test onglet de la section réponse dans postman):

une image montrant le test de réussite dans Postman
(Grand aperçu)

Notre test a donc réussi! Cependant, il est crucial que nous fassions d'abord échouer notre scénario de test, puis que nous le réussissions; cela vous aidera à vous assurer que le scénario que vous testez n'est affecté par aucun facteur externe et que le test réussit pour la raison pour laquelle vous vous attendez à ce qu'il réussisse – pas autre chose. Un bon test doit être prévisible et le résultat final doit être connu à l'avance.

Pour que notre test réussisse, je vais faire une faute de frappe dans l'URL à laquelle nous envoyons actuellement la requête GET. Cela conduira à un code d'état 404 Not Found qui fera échouer notre test. Faisons cela. Dans la barre d'adresse ayant actuellement la variable de notre baseUrl, j'ajouterai /a à lui (cela pourrait être quelque chose de aléatoire en fait). Faire à nouveau la demande et notre test échouera comme indiqué ci-dessous:

échec du test
(Grand aperçu)

Supprimer la chaîne /a fera passer le test à nouveau.

Nous avons écrit un test automatisé pour l'itinéraire domicile de notre service Web de démonstration. Pour le moment, nous avons un cas de test vérifiant l'état de la réponse. Écrivons un autre scénario de test pour vérifier si le corps de la réponse contient un message comme nous l'avons vu dans la réponse et la valeur est "Vous avez atteint le service Web de démonstration de test postman". Ajoutez l'extrait de code ci-dessous à l'éditeur de test:

pm.test("Contains a message property", function() {
    let jsonData = pm.response.json();
    pm.expect(jsonData.message).to.eql("You have reached postman test demo web service");
})

Votre fenêtre Postman devrait ressembler à ceci:

fenêtre du facteur
(Grand aperçu)

Dans l'extrait de code ci-dessus, nous créons un cas de test et obtenons l'équivalent de l'objet JavaScript du corps de la réponse de la requête qui est à l'origine en JSON en appelant json() dessus. Ensuite, nous utilisons la méthode d'assertion expect pour vérifier si la propriété de message a la valeur "Vous avez atteint le service Web de démonstration de test du facteur".

4. Répétez!

D'après la première itération ci-dessus de nos 4 étapes d'écriture des tests d'API, je crois que vous avez vu le flux. Nous répéterions donc ce flux pour tester toutes les demandes du service Web de démonstration. La prochaine étape est la demande d'inscription. Testons!

Demande d'inscription

La demande d'inscription est une demande POST qui attend le fullName, l'emailAddress et le mot de passe d'un utilisateur. Dans Postman, vous pouvez ajouter ces paramètres de plusieurs façons, mais nous choisirions x-www-form-urlencoded méthode dans les onglets Corps de la section de demande. L'image ci-dessous donne un exemple des paramètres:

un exemple des paramètres
(Grand aperçu)

Voici la réponse à la demande ci-dessus:

{
    "message": "An account has been created for kelvinomereshone@gmail.com successfully",
    "data": {
        "createdAt": 1596634791698,
        "updatedAt": 1596634791698,
        "id": "9fa2e648-1db5-4ea9-89a1-3be5bc73cb34",
        "emailAddress": "kelvinomereshone@gmail.com",
        "fullName": "Kelvin Omereshone"
    },
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJrZWx2aW5vbWVyZXNob25lQGdtYWlsLmNvbSIsImlzcyI6Ik15UGFkaSBCYWNrZW5kIiwiaWF0IjoxNTk2NjM0NzkxfQ.otCcXSmhP4mNWAHnrYvvzHkgU8yX8yRE5rcVtmGJ68k"
}
la propriété token est retournée avec le corps de la réponse
(Grand aperçu)

Dans le corps de la réponse ci-dessus, vous remarquerez qu'une propriété de jeton est renvoyée avec le corps de la réponse. Nous écririons donc un cas de test pour affirmer si un corps de réponse JSON a été renvoyé et s'il contient la propriété token. En outre, nous vérifierions également le code de statut qui renvoie 201 Créé. Alors ouvrez l'onglet Tests et ajoutez les extraits suivants:

pm.test("Status code is 201", function () {
    pm.response.to.have.status(201);
});


pm.test("Response has a JSON body", function () {
    pm.response.to.be.json;
});

pm.test("Response has a token property", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.token).to.be.a('string');
});

Ce que fait chaque cas de test doit être suffisamment évident à partir de la description du test. De haut en bas, nous vérifions si la réponse est un code d'état 201 Created, nous affirmons également si le corps de la réponse est JSON et enfin nous affirmons si la propriété token a une valeur de type string. Faisons nos tests.

Remarque: Assurez-vous de modifier au moins l'adresse e-mail du nouvel utilisateur car le service Web n'autorisera pas les e-mails en double.

Nos tests devraient réussir et lorsque vous vérifiez le Test Results de la section Réponse, vous devriez obtenir 3 tests de réussite comme indiqué ci-dessous:

3 tests de réussite
(Grand aperçu)

Passons maintenant au test de signin point final…

Demande de connexion

Le corps de la réponse de la demande de connexion est similaire à la demande d'inscription. Vous pouvez vérifier qu'en touchant le point de terminaison avec les informations d'identification de l'utilisateur – emailAddress et Password – vous vous êtes déjà inscrit. Après avoir fait cela, ajoutez les cas de test suivants à l'éditeur de tests:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});


pm.test("Response has a JSON body", function () {
    pm.response.to.be.json;
});

pm.test("Response has a token property", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.token).to.be.a('string');
});



pm.test("Response has a data property", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.data).to.be.a('object');
});

Faites la demande de connexion avec un identifiant d'utilisateur valide et votre test devrait réussir et Postman devrait ressembler à ceci:

Facteur avec un test réussi
(Grand aperçu)

Enfin, nous testerions le listing/new point final de notre API de démonstration.

Liste / Nouvelle demande

Ce test serait un peu différent. Conformément aux exigences de notre API fictive, seuls les utilisateurs connectés peuvent créer des listes. Nous aurions donc besoin d'un moyen d'authentifier la demande.

Rappelez-vous que lorsque la signature d'un jeton JWT a été renvoyée, nous pouvons utiliser ce jeton comme en-tête d'autorisation pour la demande de création de liste.

Pour ce faire dans Postman, copiez simplement le jeton que vous avez obtenu lors de la connexion et accédez au Authorization onglet de la section Demande dans Postman et sélectionnez le type à Bearer Token dans la liste déroulante Type. Vous pouvez ensuite coller le jeton dans la case à votre droite étiquetée Token. Ainsi, le nouvel onglet d'autorisation de demande devrait ressembler à ceci:

le nouvel onglet Autorisation de demande
(Grand aperçu)

Vous pouvez ensuite continuer et ajouter les paramètres dans l'onglet Corps de la requête. Vous remarquerez que le nom des champs est déjà là avec des exemples de valeurs que vous pouvez choisir de modifier ou non. Faisons une demande avant d'écrire notre test. Une réponse réussie ressemblera à ceci:

{
    "message": "New listing created successfully",
    "data": {
        "createdAt": 1596637153470,
        "updatedAt": 1596637153470,
        "id": "41d922ce-7326-43eb-93c8-31658c59e45d",
        "name": "Glorious Lounge",
        "type": "Hotel",
        "address": "No 1. Something street",
        "rent": "$100k per year",
        "lister": "9fa2e648-1db5-4ea9-89a1-3be5bc73cb34"
    }
}

Nous pouvons voir que nous récupérons un corps de réponse JSON. Nous pouvons tester cela et nous assurer également que les données ne sont pas vides. Ajoutez le scénario de test suivant à l'onglet Test:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});


pm.test("Response has a JSON body", function () {
    pm.response.to.be.json;
});

pm.test("Response has a message property", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.message).to.be.a('string');
});



pm.test("Response has a data property", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.data).to.be.a('object');
});

Avec cela ajouté, faites une autre demande et les tests devraient tous réussir comme indiqué ci-dessous:

test réussi
(Grand aperçu)

Conclusion

Cet article vise à vous montrer comment utiliser Postman pour écrire des tests automatisés pour vos API, ce qui vous permettra de combler le fossé entre le développement et l'assurance qualité, et également de minimiser la surface de bogues dans votre API.

Ressources supplémentaires

Éditorial fracassant(ks, ra, yk, il)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *