Passer au contenu principal

Assertions sur les réponses API et extraction de variables

Écrit par Ines

Le module Tests d’API de Thunders vous permet d’appeler n’importe quel endpoint HTTP depuis une étape de test, d’inspecter la réponse, et de transformer des portions de cette réponse en contrôles automatisés ou en variables réutilisables.

Cette page décrit les deux capacités clés qui s’ajoutent aux étapes API : les assertions sur les réponses et l’extraction de variables.

En bref — Exécutez une étape API → ouvrez l’inspecteur de réponse en cliquant sur l’étape API → cliquez sur Asserter ou Extraire sur n’importe quelle valeur → chaque clic ajoute une étape à la fin du cas de test → Exécutez.

À quoi sert la fonctionnalité

Lorsqu’une étape API s’exécute, Thunders capture la réponse HTTP complète :

  • Code de statut (ex. 200, 404)

  • Durée et durée de chargement (en millisecondes)

  • Corps de la réponse (analysé en JSON lorsque possible)

  • En-têtes

Depuis l’inspecteur de réponse, vous pouvez :

  • Ajouter des étapes d’assertion pour vérifier automatiquement qu’une valeur correspond au résultat attendu, à chaque exécution.

  • Ajouter des étapes d’extraction pour sauvegarder n’importe quelle valeur dans une variable nommée, réutilisable par les étapes suivantes.

Les assertions et les extractions sont de vraies étapes de test — elles apparaissent dans la liste des étapes, affichent leur statut réussite/échec, et peuvent être réordonnées ou modifiées comme n’importe quelle autre étape.

Enregistrer une réponse API complète dans une variable

Chaque étape API enregistre automatiquement sa réponse complète dans une variable. Vous pouvez personnaliser le nom depuis le formulaire de l’étape API.

  1. Appuyez sur A (ou cliquez sur Ajouter une étape → API) pour ouvrir la modale d’étape.

  2. Renseignez la méthode (GET, POST, PUT, PATCH, DELETE), l’URL, les en-têtes, le corps et l’authentification.

  3. Dans le champ Nom de la variable de réponse, choisissez un nom. Les valeurs par défaut suivent le modèle API_RESPONSE_1, API_RESPONSE_2, etc.

  4. Exécutez l’étape — l’objet réponse complet est maintenant disponible sous ce nom.

Astuce : utilisez des noms descriptifs comme LOGIN_RESPONSE, USER_PROFILE_RESPONSE ou LIST_ORDERS_RESPONSE afin que les références ultérieures restent lisibles.

Règles de nommage : lettres majuscules, chiffres et underscores uniquement. Doit commencer par une lettre. Regex : ^[A-Z][A-Z0-9_]*$.

Réutiliser les données de réponse dans les étapes suivantes

Une fois qu’une réponse est enregistrée, toute étape suivante peut la référencer avec la syntaxe [NOM_DE_VARIABLE]. Vous pouvez aussi accéder aux champs imbriqués avec la notation pointée.

Référence

Résout en

[LOGIN_RESPONSE].body.token

Le champ token du corps JSON

[LOGIN_RESPONSE].statusCode

Le code de statut HTTP

[LOGIN_RESPONSE].duration

La durée de la requête (millisecondes)

[USER_ID]

Une variable explicitement extraite dans une étape précédente

Vous pouvez utiliser ces références :

  • Dans l’URL d’une étape API suivante — https://api.example.com/users/[USER_ID]

  • Dans un en-têteAuthorization: Bearer [LOGIN_RESPONSE].body.token

  • Dans la valeur attendue d’une assertion

Commencez à taper / (ou [) dans n’importe quel champ supporté pour ouvrir l’auto-complétion de l’Éditeur de variables en ligne et choisir parmi les variables disponibles.

Asserter sur les métadonnées de réponse (statut, durée)

Les métadonnées de réponse apparaissent sous forme de cartes de métriques en haut de l’inspecteur.

Pour asserter sur une métrique :

  1. Cliquez sur Asserter (ou ouvrez le menu sur les écrans étroits) sur la carte Statut.

  2. La modale d’assertion s’ouvre avec le chemin du champ pré-rempli, ex. [API_RESPONSE_1].statusCode.

  3. Choisissez un opérateur.

  4. Saisissez la valeur attendue (ex. 200).

  5. Cliquez sur Ajouter une assertion — une étape Assertion est ajoutée à la fin du cas de test.

Assertions courantes sur les métadonnées :

Objectif

Champ

Opérateur

Valeur attendue

Statut de succès

statusCode

est égal à

200

Accepter n’importe quel 2xx

statusCode

est inférieur à

300

Respecter un budget de latence

duration

est inférieur à

1000

Vérifier une redirection

statusCode

est égal à

302

Asserter sur les valeurs JSON de réponse

Le corps de la réponse s’affiche sous forme d’arbre JSON interactif. Dépliez n’importe quel objet ou tableau pour atteindre un champ précis.

Pour asserter sur une valeur JSON :

  1. Dépliez l’arbre JSON jusqu’au champ qui vous intéresse.

  2. Cliquez sur Asserter à côté de la valeur.

  3. Le chemin du champ est calculé automatiquement, ex. [API_RESPONSE_1].body.title.

  4. Sélectionnez un opérateur.

  5. Saisissez la valeur attendue et cliquez sur Ajouter.

Opérateurs disponibles :

Opérateur

À utiliser pour

est égal à / n’est pas égal à

Correspondance exacte (chaînes, nombres, booléens)

est supérieur à / est supérieur ou égal à

Comparaisons numériques

est inférieur à / est inférieur ou égal à

Comparaisons numériques

contient

Vérification de sous-chaîne ou d’élément de tableau

commence par / finit par

Préfixe / suffixe sur des chaînes (identifiants, URL)

has_key / not_has_key

Vérifier qu’un objet JSON contient (ou non) une clé donnée

Astuce : utilisez has_key / not_has_key lorsque seule la présence d’une clé compte, pas sa valeur — idéal pour les feature flags ou les champs optionnels.

Cibler les clés ou les valeurs

Lorsque vous cliquez sur Asserter ou Extraire sur un champ appartenant à un objet JSON, la modale affiche une bascule Cible avec deux options : Clé et Valeur. Elle vous permet de décider si l’assertion ou l’extraction porte sur le nom du champ ou sur son contenu. Le chemin est renseigné automatiquement pour vous — vous n’avez jamais besoin de l’écrire.

  • Valeur (par défaut) — agit sur le contenu du champ.

  • Clé — agit sur le nom du champ lui-même.

La bascule Cible n’apparaît que pour les valeurs qui sont enfants directs d’un objet JSON. Elle est masquée pour les éléments de tableau, les cartes de métriques (statut, durée) et les champs de réponse de premier niveau — il n’y a pas de clé à cibler dans ces cas.

Quand cibler la clé :

  • Vérifier qu’un objet de réponse expose toujours un nom de champ précis (test de contrat).

  • Extraire une clé générée dynamiquement (par exemple un identifiant utilisé comme clé de map) pour la réutiliser dans les étapes suivantes.

Exemple — à partir d’un corps de réponse produit :

{   "title": "Toold",   "price": 9.99,   "meta": {     "barcode": "5784719087687",     "qrCode": "https://cdn.dummyjson.com/public/qr-code.png"   } }
  • Cliquer sur Asserter pour meta.barcode avec Cible → Valeur vérifie que le code-barres vaut "5784719087687".

  • Cliquer sur Asserter pour meta.barcode avec Cible → Clé vérifie que la réponse inclut toujours un champ littéralement nommé "barcode" — un simple test de contrat qui résiste aux changements de valeur.

Astuce : si vous voulez simplement vérifier qu’une clé existe, has_key sur l’objet parent est généralement plus simple. Utilisez Cible → Clé lorsque vous avez besoin du nom de la clé comme valeur (par exemple pour l’enregistrer dans une variable).

Extraire des clés et des valeurs dans des variables

L’extraction de variable stocke une portion de la réponse sous un nom de variable afin que les étapes suivantes puissent l’utiliser.

Pour extraire une valeur :

  1. Dans l’inspecteur de réponse, localisez la valeur à réutiliser (carte de métrique ou nœud de l’arbre JSON).

  2. Cliquez sur Extraire.

  3. La modale d’extraction s’ouvre avec le chemin du champ pré-rempli.

  4. Saisissez un nom de variable — le champ passe automatiquement en majuscules et retire les caractères invalides.

  5. Cliquez sur Ajouter — une étape Extraction mécanique est ajoutée à la fin du cas de test.

Conventions de nommage recommandées :

  • AUTH_TOKEN, REFRESH_TOKEN — identifiants

  • USER_ID, ORDER_ID, CART_ID — identifiants de ressources

  • CREATED_AT, EXPIRES_AT — horodatages

  • TOTAL_COUNT, PAGE_COUNT — métadonnées numériques

Clés vs valeurs : utilisez has_key dans une assertion pour tester la présence d’une clé. Utilisez une extraction avec le nom de la clé comme nom de variable pour sauvegarder la valeur de cette clé en vue d’un usage ultérieur.

Utiliser l’inspecteur de réponse

L’inspecteur de réponse est la surface de découverte. Il comporte trois zones :

  • Cartes de métriques — statut, durée, durée de chargement.

  • Bouton Copier la réponse — copie le corps complet dans le presse-papiers.

  • Arbre JSON — vue dépliable du corps avec des actions par valeur.

Chaque clic sur Asserter ou Extraire ajoute immédiatement une nouvelle étape à la fin du cas de test. Ajoutez-les une par une — chaque étape apparaît dans la liste dès sa création et peut être réordonnée ou modifiée comme n’importe quelle autre étape.

Pourquoi c’est important : vous restez dans l’inspecteur de réponse tout le temps. Cliquez sur Asserter ou Extraire sur n’importe quelle valeur de l’arbre JSON et l’étape apparaît directement dans le cas de test — sans modale d’étape ni confirmation supplémentaire.

Exemples de bout en bout

Exemple 1 — Récupérer les données produit via l’API et les vérifier sur la boutique

Objectif : récupérer un produit réel du catalogue et vérifier que l’interface de la boutique affiche les mêmes valeurs.

  1. Étape 1 — API : GET /products/42. Variable de réponse : PRODUCT_RESPONSE

  2. Étape 2 — Extraire (ajoutée depuis l’inspecteur) : [PRODUCT_RESPONSE].body.titlePRODUCT_TITLE

  3. Étape 3 — Extraire (ajoutée depuis l’inspecteur) : [PRODUCT_RESPONSE].body.pricePRODUCT_PRICE

  4. Étape 4 — Navigateur : aller sur /shop/products/42

  5. Étape 5 — Assertion visuelle : la page affiche [PRODUCT_TITLE]

  6. Étape 6 — Assertion visuelle : la page affiche [PRODUCT_PRICE]

Exemple 2 — Créer un élément via l’API, puis continuer le parcours dans le navigateur

Objectif : créer un ticket de support via l’API pour que le test d’UI puisse l’ouvrir et agir dessus.

  1. Étape 1 — API : POST /tickets avec le corps {"title": "Impossible de téléverser l’avatar"}. Variable de réponse : NEW_TICKET

  2. Étape 2 — Extraire : [NEW_TICKET].body.idTICKET_ID

  3. Étape 3 — Navigateur : aller sur /support/tickets/[TICKET_ID]

  4. Étape 4 — Assertion visuelle : Ticket #[TICKET_ID] est visible sur la page

  5. Étape 5 — Navigateur : cliquer sur Marquer comme résolu

  6. Étape 6 — Assertion visuelle : le badge de statut Résolu est visible

Exemple 3 — Capturer des valeurs côté serveur pour que les étapes suivantes utilisent des données réelles

Objectif : lire le plan et les crédits actuels du compte, puis vérifier que les mêmes valeurs apparaissent sur la page de facturation.

  1. Étape 1 — API : GET /account/usage. Variable de réponse : USAGE_RESPONSE

  2. Étape 2 — Asserter [USAGE_RESPONSE].body has_key plan

  3. Étape 3 — Extraire [USAGE_RESPONSE].body.planCURRENT_PLAN

  4. Étape 4 — Extraire [USAGE_RESPONSE].body.creditsRemainingCREDITS_REMAINING

  5. Étape 5 — Navigateur : aller sur /settings/billing

  6. Étape 6 — Assertion visuelle : la page de facturation affiche [CURRENT_PLAN]

  7. Étape 7 — Assertion visuelle : la page de facturation affiche [CREDITS_REMAINING]

Conseils et dépannage

  • Si vous voyez Credential or Variable not found 'VARIABLE_NAME' à l’exécution, vérifiez l’orthographe et assurez-vous que l’étape qui produit la variable s’est exécutée avant celle qui la consomme.

  • Les secrets (mots de passe, tokens) sont masqués par défaut dans les champs d’authentification — cliquez sur l’icône œil pour les révéler.

  • Environnements : chaque environnement conserve ses propres URL / en-têtes / corps pour une étape API, mais les variables extraites pendant une exécution sont partagées entre les étapes de cette exécution.

Besoin de tester un flux qui s’étend sur plusieurs exécutions ? Les variables d’étape extraites ne vivent que le temps d’une exécution de cas de test. Pour des valeurs qui doivent persister d’une exécution à l’autre, utilisez plutôt des variables de projet ou des variables d’environnement.

Autres lectures liées qui peuvent vous être utiles :

Avez-vous trouvé la réponse à votre question ?