Ces dernières années, l’architecture des microservices est devenue de plus en plus populaire. Elle est largement adoptée par plusieurs entreprises.
Avec une telle architecture et lorsqu’elle est réalisée correctement, elle offre plusieurs avantages:
En revanche, dans le monde des microservices, la difficulté des tests d’intégration est un enjeu majeur !
Prenons un exemple simple d’une architecture composée de 10 microservices. Chaque service est géré par une équipe indépendante.
Ce scénario nous amène à nous poser les questions suivantes :
L’approche classique pour tester cette architecture consiste à déployer les microservices dans des environnements de test séparés, puis à exécuter des tests automatisés de bout en bout.
Et pour mettre en œuvre cette stratégie, certains prérequis sont nécessaires :
Sans surprise, l’efficacité de cette approche est généralement faible, on se retrouve avec :
Cette approche de test est généralement plus adaptée aux architectures monolithiques mais pas aux microservices.
Existe-t-il d’autres approches de test plus efficaces ?
La réponse est oui, une stratégie de tests de contrats (Contract Testing) pourrait être une solution plus fiable et plus efficace à ce véritable challenge des tests d’intégration !
Les tests de contrats (Contract testing en anglais) est une technique de tests d’intégration inter-services.
Cette technique est généralement utilisée dans les architectures microservices. Elle permet de tester les points d’intégration en isolant chaque microservice et en vérifiant si les requêtes et les réponses HTTP transmises par le microservice sont conformes à une compréhension partagée et documentée dans un contrat.
De cette manière, les tests de contrats garantissent que les microservices peuvent communiquer entre eux.
Pour avoir une compréhension approfondie des tests contractuels, il est important de connaître les terminologies suivantes :
Le consommateur c’est l’application ou service (celui qui appelle l’API provider) qui utilise des fonctionnalités ou des données exposées par une autre application ou un autre service
Le fournisseur c’est l’application qui fournit (expose des services http) des fonctionnalités ou des données pour une autre application ou un autre service
Un contrat est une forme documentée de compréhension partagée entre un consommateur et un fournisseur.
Les trois approches les plus courantes sont celles utilisées par le projet PACT (Consumer-driven, provider-driven et Bidirectional) mais le principe reste valable avec d’autres outils ou technologies
Avec cette approche, chaque consommateur définit ses attentes (requêtes, réponses, messages) vis-à-vis d’un fournisseur Le contrat est donc généré par le consommateur et transmis au fournisseur Le fournisseur doit être en mesure de répondre à l’ensemble des attentes exprimées par le consommateur
Quand faire du consumer-driven ?
Avec cette approche c’est le fournisseur qui s’occupe de la définition des différentes interactions (requêtes, réponses, messages). Le consommateur doit donc respecter les spécifications fournies par le fournisseur. Un contrat axé sur le fournisseur ressemble beaucoup à une documentation technique.
Quand faire du provider-driven ?
Avec cette approche:
A titre d’exemple la plateforme Pactflow dispose d’une fonctionnalité payante de Bidirectional contract testing
L’outil (Open source) le plus utilisé pour le contract testing c’est l’outil Pact PACT est un écosystème pour faire des tests contractuels, il est composé de plusieurs éléments:
Il existe aussi d’autres outils comme:
Voulez-vous en savoir plus sur les tests de contrats ?
Cet article vous a plu ❤️ ? N’hésitez pas à le partager pour que d’autres personnes puissent en profiter