Simplifier vos requêtes API avec les tests de Postman

Simplifier vos requêtes API avec les tests de Postman

Saviez-vous que le fameux client Postman dispose de son propre runtime développé en Nodejs ? Un must-have vous permettant de construire des requêtes API dynamiques en récupérant la réponse d'une autre requête API, ajouter des conditions etc...

L'authentification auprès d'une API

Prenons le cas le plus courant où vous avez besoin de vous authentifier auprès d'une API avec la méthode "Basic HTTP". Cette méthode consiste tout simplement à fournir un nom d'utilisateur et un mot de passe, le tout encodé en Base64 et le fournir dans le Header de la requête HTTP comme ceci :

echo 'username:password' | base64

dXNlcm5hbWU6cGFzc3dvcmQK

Le Header aura comme clé Authorization  et comme valeur  Basic <votre user:password encodé en base64> comme ceci :

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQK

Prenons un cas concret d'une API qui nécessite ce type d'authentification en créant notre requête dans Postman comme ceci :

Réponse HTTP :
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiQVBJIiwiMTcyLjI4LjAuMiJdLCJleHAiOjE2NzY1NjQ0MzcsImp0aSI6ImNmbjU2OTlncmZhYzczZGw4N3AwIiwibmJmIjoxNjc2NTYzMjA3LCJwZXJtaXNzaW9ucyI6WyIqIl0sInN1YiI6IjE2NzI0MTQ0MjIyNjQiLCJ1c2VybmFtZSI6InN5bm9fYWRtaW4ifQ.5rQLALiSfGf4W7Mlx59w5a9rdh19bMGzoBatkUd6cXY",
  "expires_at": "2023-02-16T16:20:37Z"
}

Je peux ensuite fournir cet access_token dans ma prochaine requête :

Cela pose deux problèmes :

  • A l'expiration de cet access_token , il faut relancer la requête pour s'authentifier, récupérer le token, modifier le Header de la requête avec le nouveau token.
  • L'access_token est noté en clair dans Postman ce qui n'est pas sécurisé, et ne vous permet pas de pouvoir échanger avec d'autres personnes votre requête dans Postman.

C'est là qu’intervient le principe de tests dans Postman, c'est ce processus là que nous allons automatiser et sécuriser !

Notre premier test

Dans notre première requête d'authentification, la réponse HTTP est un JSON et le token est stocké dans la clé access_token.

Nous allons donc stocker la valeur de la clé access_token dans une variable nommée token_auth avec le test suivant :

pm.environment.set("token_auth", pm.response.json().access_token);

Ce test vient :

  • Créer une variable nommée token_auth
  • Parser le JSON contenu dans le body de la réponse HTTP et filtrer sur la clé access_token.

Votre test devrait ressembler à ceci :

Nous allons maintenant modifier notre requête afin d'y ajouter cette variable à la place du token en clair comme ceci :

Vous venez d'automatiser et de sécuriser votre requête pour vous authentifier auprès d'une API dans Postman ! 🎉

Pour une poignée de tests

Il est possible d'effectuer également des tests pour s'assurer qu'une clé est bien contenue dans le body de la réponse HTTP par exemple.
Toujours dans notre cas, si on crée une fonction comme ceci dans notre test :

pm.test("Le token est contenu dans la réponse", function () {
    pm.expect(pm.response.json()).to.have.property('access_token');
});
Retour :

Vous pouvez inclure autant de tests unitaire que vous le souhaitez afin de sécuriser un maximum vos collections Postman.

Il est aussi possible de tester le code retour HTTP avec la fonction suivante :

pm.test("Code retour HTTP 200", function () {
    pm.response.to.have.status(200);
});
Test du code retour HTTP 200 OK

Mais encore, il est aussi possible de tester la durée d'une réponse HTTP avec la fonction ci-dessous :

pm.test("Réponse HTTP inférieure à 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});