DEV Community

Cover image for Qu'est-ce que le test d'API headless
Antoine Laurent
Antoine Laurent

Posted on • Originally published at apidog.com

Qu'est-ce que le test d'API headless

Le test d'API sans interface graphique (headless API testing) consiste à valider une API sans interface utilisateur graphique. Concrètement, vous définissez les tests à partir du contrat d’API, vous les exécutez dans un terminal ou un pipeline CI/CD, puis vous exploitez les résultats sous forme de logs, de codes de sortie ou de rapports structurés. Si vous avez déjà lancé des tests Apidog CLI dans une build, ou exécuté une collection avec Newman, vous avez déjà fait du test d’API headless. Ce guide montre comment l’utiliser pour rendre vos tests d’API automatisables, reproductibles et compatibles CI/CD.

Essayez Apidog aujourd’hui

Le test d'API sans interface graphique, défini

Le terme « headless » vient du test de navigateur : un navigateur headless s’exécute sans fenêtre visible. Appliqué aux API, le principe est similaire : les tests s’exécutent sans GUI, sans clic manuel et sans écran à surveiller.

Un test d’API sans interface graphique repose généralement sur trois éléments :

  • Aucune interface graphique dans le chemin d’exécution : le test tourne dans un shell, un conteneur ou un runner CI.
  • Un contrat comme source de vérité : les requêtes, réponses, schémas et assertions sont alignés sur une spécification OpenAPI, une collection exportée ou un scénario de test.
  • Une sortie exploitable par machine : le résultat est disponible sous forme de code de sortie, logs console, JSON, HTML ou rapport JUnit.

L’objectif est simple : tester l’API comme elle est réellement consommée, c’est-à-dire par des requêtes réseau et non via une interface utilisateur.

Pourquoi c'est important lorsque l'API est le produit

Pour de nombreuses équipes, l’API n’est plus seulement une couche technique. C’est le produit lui-même. Lorsque votre API est le produit, chaque endpoint représente un contrat avec les consommateurs.

Dans ce contexte, un endpoint qui casse peut bloquer :

  • une application mobile ;
  • un frontend ;
  • un service interne ;
  • une intégration partenaire ;
  • un agent IA ;
  • un workflow automatisé.

Vous ne pouvez donc pas dépendre uniquement de tests manuels avant chaque release. Vous avez besoin de tests qui s’exécutent automatiquement :

  • à chaque commit ;
  • à chaque pull request ;
  • avant une fusion ;
  • avant un déploiement ;
  • sur des environnements planifiés, comme staging ou production.

Le test headless répond précisément à ce besoin. Il permet d’exécuter les mêmes validations dans un environnement local, dans Jenkins, GitHub Actions, GitLab CI ou tout autre pipeline.

Cette reproductibilité est la base d’un CI/CD robuste pour le test d'API.

En quoi cela diffère des tests manuels et des tests avec interface graphique

Les tests manuels restent utiles pour explorer une API, comprendre une réponse ou déboguer un cas spécifique. Mais ils ne suffisent pas pour protéger une livraison continue.

Aspect Test manuel / avec interface graphique Test d'API sans interface graphique
Déclencheur Une personne clique ou envoie Une commande, un hook ou une étape de pipeline
Où il s'exécute Une application de bureau ou web Terminal, conteneur, exécuteur CI
Répétabilité Dépend de la personne Identique à chaque exécution
Sortie À l'écran, visuelle Codes de sortie, journaux, rapports JUnit/JSON
Compatibilité CI/CD Difficile à intégrer Conçu pour cela
Meilleur pour Exploration, débogage initial Régression, verrous, exécutions planifiées

En pratique, les deux approches se complètent :

  1. Vous concevez et déboguez une requête dans une interface graphique.
  2. Vous ajoutez des assertions.
  3. Vous stabilisez le scénario.
  4. Vous l’exécutez ensuite en headless via une CLI dans votre pipeline.

Autrement dit : l’interface graphique aide à créer le test ; la CLI le rend automatisable.

Le rôle de la CLI

La ligne de commande est le composant qui rend le test réellement headless. Elle prend une définition de test, l’exécute sur un environnement cible, puis renvoie un résultat exploitable par un pipeline.

Un runner CLI efficace doit au minimum permettre de gérer :

  • Le ciblage d’environnement : exécuter les mêmes tests sur local, staging ou production.
  • Les variables : injecter des URLs, tokens, identifiants ou paramètres spécifiques.
  • Les tests pilotés par les données : exécuter le même scénario avec plusieurs jeux de données CSV ou JSON.
  • Les rapports : produire une sortie console, HTML, JSON ou JUnit.
  • Les codes de sortie : renvoyer un statut non nul en cas d’échec pour bloquer la build.

Exemple de logique attendue dans un pipeline :

run-api-tests
if [ $? -ne 0 ]; then
  echo "Les tests API ont échoué"
  exit 1
fi
Enter fullscreen mode Exit fullscreen mode

Ce comportement transforme vos tests d’API en garde-fou de livraison.

Plusieurs outils existent pour ce type d’exécution. Newman exécute des collections Postman depuis la ligne de commande avec des rapports CLI, JSON et JUnit. Hurl permet d’écrire des tests HTTP en texte clair. Prism, WireMock et Mockoon sont souvent utilisés pour le mocking ou le stubbing.

Le bon choix dépend surtout de l’endroit où vit déjà votre contrat d’API.

Où Apidog s'intègre

Apidog CLI permet d’exécuter des tests API sans interface graphique. La commande apidog run peut lancer des scénarios de test, des dossiers de scénarios, des suites de tests ou des fichiers locaux exportés sans ouvrir l’application graphique.

Cela permet de l’utiliser dans :

  • un pipeline CI/CD ;
  • une tâche planifiée ;
  • un script local ;
  • une étape de validation avant déploiement.

Apidog CLI couvre les besoins essentiels du test headless :

  • Tests basés sur les données : utilisez -d ou --iteration-data avec un fichier CSV ou JSON pour rejouer un test avec plusieurs lignes d’entrée.
  • Nombre d’itérations : utilisez -n pour définir combien de fois exécuter le scénario.
  • Rapports : utilisez -r pour sélectionner les formats de sortie, par exemple cli, html ou json.
  • Environnements : utilisez -e pour cibler un environnement spécifique.
  • Branches : utilisez --branch pour exécuter les tests sur une branche de projet donnée.

Exemple de commande :

apidog run \
  -e staging \
  -r html,cli
Enter fullscreen mode Exit fullscreen mode

Pour un test piloté par les données :

apidog run \
  -e staging \
  -d users.csv \
  -n 10 \
  -r json,cli
Enter fullscreen mode Exit fullscreen mode

L’intérêt principal est que les tests exécutés en headless proviennent du même espace où l’API est conçue, documentée et simulée. Avec Apidog, vous évitez de maintenir une collection séparée qui diverge progressivement de la spécification.

Vous pouvez aussi exécuter le serveur de maquette d’Apidog dans un contexte CI afin de tester un consommateur contre une dépendance simulée avant que le backend réel ne soit disponible.

Pour un exemple complet, consultez le guide Apidog CLI.

Exemple d’intégration dans un pipeline CI

Un test headless devient utile lorsqu’il est ajouté à un workflow automatisé. Le principe est toujours le même :

  1. Installer l’outil CLI.
  2. Récupérer le projet ou les tests.
  3. Injecter les variables d’environnement.
  4. Exécuter les tests.
  5. Faire échouer le pipeline si la commande échoue.
  6. Publier les rapports comme artefacts.

Exemple générique :

steps:
  - name: Installer les dépendances
    run: |
      npm install -g apidog-cli

  - name: Exécuter les tests API
    run: |
      apidog run -e staging -r cli,json

  - name: Archiver les rapports
    if: always()
    run: |
      mkdir -p reports
      cp -r ./apidog-reports/* reports/
Enter fullscreen mode Exit fullscreen mode

L’élément important n’est pas le fournisseur CI utilisé, mais le fait que la commande renvoie un code de sortie exploitable. Si les assertions échouent, le pipeline doit échouer.

Bonnes pratiques pour des tests API headless maintenables

Pour éviter que vos tests headless deviennent fragiles, appliquez quelques règles simples.

1. Testez le contrat, pas l’implémentation interne

Vérifiez ce que le consommateur observe :

  • code HTTP ;
  • structure JSON ;
  • champs obligatoires ;
  • types ;
  • valeurs critiques ;
  • messages d’erreur attendus.

Évitez de dépendre de détails internes qui peuvent changer sans casser le contrat public.

2. Séparez les environnements

Ne codez pas l’URL de base directement dans les tests. Utilisez des environnements ou des variables :

apidog run -e staging
apidog run -e production
Enter fullscreen mode Exit fullscreen mode

Cela permet de rejouer les mêmes scénarios sans dupliquer les tests.

3. Ajoutez des jeux de données

Les tests pilotés par les données évitent de copier-coller des scénarios identiques.

Exemple de fichier CSV :

email,password,expectedStatus
user@example.com,valid-password,200
unknown@example.com,wrong-password,401
blocked@example.com,valid-password,403
Enter fullscreen mode Exit fullscreen mode

Vous pouvez ensuite exécuter le scénario sur plusieurs cas avec --iteration-data.

Pour le modèle détaillé, voir le guide sur le test paramétré.

4. Produisez toujours un rapport

Même si le pipeline échoue, conservez un rapport lisible. Une sortie console est utile pour un diagnostic rapide, tandis qu’un rapport HTML ou JSON facilite l’analyse après coup.

Exemple :

apidog run -r html,cli,json
Enter fullscreen mode Exit fullscreen mode

5. Faites échouer la build en cas de rupture

Un test headless n’est utile comme garde-fou que si son échec bloque réellement la suite du pipeline.

Dans votre CI, évitez de masquer les erreurs avec des commandes comme :

apidog run || true
Enter fullscreen mode Exit fullscreen mode

Sauf cas très spécifique, laissez le code de sortie faire échouer la build.

Et avec l’IA ?

Il existe aussi un angle lié aux agents IA. Le serveur MCP d’Apidog permet à un agent IA ou à un IDE comme Cursor ou Claude de lire et manipuler directement vos spécifications API. Cela devient utile lorsqu’un agent génère, met à jour ou maintient des tests qui seront ensuite exécutés en headless.

L’article sur le débogage visuel avec le client Apidog MCP montre comment cette connexion fonctionne en pratique.

Questions fréquemment posées

Le test d'API sans interface graphique est-il la même chose que le test automatisé ?

Pas exactement. Le test automatisé signifie qu’un test peut s’exécuter sans intervention humaine à chaque étape. Le test d’API headless est un test automatisé qui n’utilise pas non plus d’interface graphique dans son chemin d’exécution.

Dans la plupart des architectures modernes, les tests API automatisés sont donc naturellement headless.

Ai-je encore besoin d'un outil GUI si je teste sans interface graphique ?

Oui, généralement. L’interface graphique reste utile pour :

  • construire une requête ;
  • inspecter une réponse ;
  • ajuster des paramètres ;
  • déboguer un scénario ;
  • concevoir des assertions.

Une fois le test stable, vous l’exécutez en CLI dans le pipeline. C’est le modèle décrit dans le guide sur le test Apidog CLI depuis la ligne de commande.

Comment le test sans interface graphique s'intègre-t-il dans le CI/CD ?

Vous ajoutez l’exécution CLI comme étape du pipeline. La commande cible le bon environnement, exécute les scénarios, produit des rapports et renvoie un code de sortie.

Si le code de sortie est non nul, la build échoue. C’est le mécanisme de base derrière les tests d'API en CI.

Le test sans interface graphique peut-il également couvrir les API simulées ?

Oui. Vous pouvez exécuter des tests contre un serveur de maquette pendant que le backend réel est encore en développement. C’est un cas fréquent de simulation d'API.

Cela permet à un frontend ou à un service consommateur de valider le contrat avant que la dépendance réelle soit prête.

En résumé

Le test d’API sans interface graphique consiste à exécuter des tests API sans écran, depuis une commande, avec des résultats lisibles par machine. Il est piloté par le contrat, reproductible et conçu pour le CI/CD.

Pour le mettre en place :

  1. Définissez vos scénarios à partir du contrat API.
  2. Ajoutez des assertions sur les réponses.
  3. Paramétrez les environnements.
  4. Exécutez les tests avec une CLI.
  5. Produisez des rapports.
  6. Faites échouer le pipeline en cas de régression.

Si vous voulez l’essayer, téléchargez Apidog, concevez ou importez votre API, puis exécutez vos tests headless avec apidog run. Le même contrat que vous utilisez pour concevoir l’API peut alimenter les tests qui protègent votre pipeline, directement depuis Apidog.

Top comments (0)