Qu’est-ce qu’une API ?
Tout d’abord, il faut définir ce qu’est concrètement une API.
API est un acronyme anglais qui signifie « Application Programming Interface », que l’on traduit par interface de programmation d’application. Une API permet de rendre disponible les données ou les fonctionnalités d’une application existante afin que d’autres applications les utilisent.
Généralement, on dit qu’une API « expose », c’est-à-dire qu’elle rend disponible des données ou des fonctionnalités. Ces API nécessitent, en règle générale, une clé (ou API key) et d’autres mécanismes d’authentification/autorisation. Ceux-ci permettent aux consommateurs d’avoir les droits nécessaires pour consommer l’API.
Cependant, il existe différents types d’API : des API privées, qui sont utilisées en interne dans une entreprise, et des API publiques qui sont accessibles à tous. Des tiers peuvent développer des applications qui interagissent avec ces API publiques.
Quelques exemples concrets…
Pour comprendre le rôle majeur d’une API, il faut prendre l’exemple des comparateurs de prix pour les hôtels et les avions.
Ces comparateurs utilisent des APIs afin de rendre vos recherches plus simples et plus rapides. Au lieu de consulter le site de chaque compagnie aérienne afin de connaitre le prix d’un vol, le site web du comparateur récupère toutes les données des sites partenaires via leurs APIs selon vos propres critères de recherches (horaires, dates, escales…).
Deux autres exemples : l’API Twitter vous permet d’afficher vos derniers tweets sur votre site web tandis que l’API Youtube vous permet d’intégrer des vidéos Youtube, de rechercher, de créer des playlists…
Pourquoi tester des API ?
Les API exposent des données ou des fonctionnalités. Il ne faut pas seulement tester la connectivité à une API, il est également nécessaire de tester la qualité de la donnée exposée. Ces tests API demandent un effort non négligeable à une équipe QA et doivent être intégrés dans le planning de réalisation d’un projet de développement d’une application ou d’un site web.
Souvent, les tests API sont réalisés par les développeurs eux-mêmes. Il est indispensable que des tests API soient également effectués par une équipe QA. Cette phase de test contribue à la fiabilité, à la qualité voire au succès d’une application.
Une équipe QA sera chargée de détecter des erreurs, des bugs ou défaillances d’une API et devra vérifier que les exigences définies au début du projet sont respectées. Cela permet de garantir la qualité attendue par les utilisateurs.
On pourrait croire qu’une phase de tests en fin de développement suffit. Malgré tout, les développements et les tests de l’équipe QA doivent aller de pair. L’idéal est de vérifier, à chaque développement ou livraison de l’application, que les API fonctionnent correctement : pas de régressions sur l’existant ni d’anomalies dans les nouvelles fonctionnalités.
Quand tester ses API ?
Une véritable stratégie de tests doit être mise en place pour les tests d’API afin d’apporter une qualité maximale à votre application.
Il faut effectuer ces tests, à chaque modification du code, de façon fréquente ou en continu. Des tests automatiques peuvent être mis en place afin de s’assurer de la disponibilité de l’API, mais également à chaque modification du code : ajout ou modification de fonctionnalités. Les tests d’API insufflent au sein d’un projet une culture de tests en continu.
Pour effectuer des tests API à toutes les étapes d’un projet, il apparait nécessaire de créer plusieurs environnements : développement, recette, pré-production, production. Ainsi, à chaque étape, chaque acteur du projet exécute l’ensemble de ces tests sur l’environnement auquel il est censé intervenir :
- Les développeurs sur l’environnement de développement
- Les équipes QA et métier sur l’environnement de recette, de pré-production et de production.
Que faut-il tester ?
L’équipe de développement et l’équipe QA se doivent de vérifier qu’une API est disponible, qu’elle peut envoyer et recevoir des données.
Tester les conditions d’erreurs n’est pas à négliger. Il faut vérifier qu’une API retourne le bon code erreur lorsque le système rejette un message entrant :
- problème de données,
- problème de sécurité,
- format du message incorrect,
- indisponibilité de l’API,
- …
Les équipes de tests doivent vérifier la cohérence (format, longueur du champ…) des données selon les spécifications définies en début du projet ou lors des évolutions. Bien sûr, les tests ne seront pas les mêmes selon la méthode de l’API : GET, POST, PUT, DELETE. Il faut bien identifier la nature d’un test selon la méthode de l’API.
Pour vérifier le bon fonctionnement d’une API, les équipes de test doivent implémenter des assertions pour vérifier le contenu d’une réponse. Sans assertions, l’outil teste uniquement si l’API est accessible mais ne teste pas les données réelles renvoyées par l’API. Si vous définissez des assertions, le test n’est considéré comme réussi que si toutes les assertions réussissent.
Vous pourrez mettre en place différents types d’assertions : sur tout le contenu de la réponse ou une partie seulement (un ou plusieurs champs spécifiques) :
- temps de réponse,
- code HTTP de la réponse,
- présence ou non d’un champ,
- nombre d’occurrences…
Les équipes de tests doivent aussi prévoir, dans leurs stratégies de tests API, une phase de test de sécurité et de performances (phase surtout implémentée avant la mise en production sur l’environnement de pré-production, qui est souvent « iso-prod »).
Quels outils pour tester une API ?
- SoapUI
Pour une équipe QA, il est nécessaire de bien identifier le bon outil pour son projet. Cela n’est pas simple. Plusieurs raisons peuvent rendre ce choix difficile :
- Méconnaissance des outils du marché ou des frameworks de test.
- Manque d’expertise ou connaissances.
- Coût d’un outil.
SoapUI est un outil très répandu pour tester des web services SOAP et des APIs REST. Si l’équipe de test a des scénarios de tests complexes, SoapUI est l’un des outils à ne pas négliger. L’outil est très fonctionnel et est entièrement dédié aux tests API.
Il est disponible en version open-source ou pro (coût assez important). Cette dernière propose des fonctionnalités avancées :
- assistants d’assertions,
- éditeurs de formulaires,
- données chargées à partir de fichier,
- prise en charge de la CI/CD, tests asynchrones…).
Une fonctionnalité de gestion des environnements est présente et permet de tester l’ensemble de vos tests dans tous les environnements que vous aurez défini.
SoapUI s’intègre parfaitement avec Jira ou Git.
- Katalon Studio
C’est également une solution intéressante pour tester les API / Web services. Katalon prend en charge les tests web et mobile, fonctionne sur Windows et Mac. Il supporte les formats SOAP et REST pour les tests d’API et de WS. Enfin, il est compatible avec le langage Cucumber pour générer des scénarios de tests.
Katalon Studio se positionne comme une solution d’automatisation complète de bout en bout pour les développeurs et les testeurs.
- Postman
Postman est l’un des outils les plus incontournables du développement web. Les utilisateurs peuvent installer cet outil comme une extension de navigateur ou une application de bureau sur Mac, Linux, Windows. Il est très facile à utiliser et permet de partager et réutiliser des projets de tests implémentés dans Postman.
Cet outil est parfait pour faire des tests d’API rapides mais il permet également de faire des tests pour des scénarios plus complexes. C’est également un excellent outil pour mettre en place une stratégie d’automatisation de vos tests API.
- Karaté
Karaté est un nouvel outil pour les tests API. Vous écrirez vos tests en utilisant une syntaxe de type BDD : Gherkin. Il s’intègre parfaitement avec l’outil d’intégration continue Jenkins et est open-source. Il peut être rapidement pris en main même par des non-développeurs.
Quelques atouts de Karaté : exécution en parallèle des tests, automatisation des tests API et UI, création de mocks… mais surtout utilisation exclusive du Gherkin (pas besoin de connaissance en Java) qui est compréhensible par les QA.
Pour conclure…
Ces 4 outils sont ceux qui semblent les plus destinés aux QA. De nombreuses fonctionnalités vont permettre de tester des API et de mettre en place une véritable industrialisation des tests.
Bien que l’automatisation ne permette pas totalement de remplacer des tests manuels, ces tests peuvent être plus efficaces s’ils sont automatisés. Pour une bonne démarche DevOps, l’automatisation permet au QA de se libérer d’une charge redondante et de fiabiliser la phase de test qui peut être répétitive et chronophage.