Tutoriel sur les tests d'intégration avec Bitbucket Pipelines

Découvrez comment exécuter des tests d'intégration avec Bitbucket Pipelines en exécutant plusieurs services dans des conteneurs Docker distincts à l'intérieur d'un pipeline.

Sten Pittet Sten Pittet

Les tests sont un élément essentiel de l'intégration et de la livraison continues. Si vous pratiquez le déploiement continu, il s'agira de la dernière ligne de défense contre les bugs avant que les changements ne soient livrés à vos clients. Les tests unitaires qui permettent de valider les méthodes et les classes individuelles sont un excellent début pour éviter les problèmes, mais vous devrez également exécuter des tests d'intégration afin de vous assurer que les différents modules utilisés par votre application (serveur d'application, base de données, cache) interagissent correctement. Nous verrons dans ce tutoriel comment vous pouvez exécuter des tests d'intégration grâce à Bitbucket Pipelines en faisant fonctionner plusieurs services dans des conteneurs Docker séparés dans un pipeline.

Exigences

Étape 1 : Exécutez l'exemple d'application en local

Nous utiliserons une application Node.js de base qui affiche un message sur la page d'accueil et consigne les visites dans une base de données. Pour vous concentrer sur la configuration de Bitbucket Pipelines, vous pouvez simplement cloner l'application depuis votre terminal.

git clone git@bitbucket.org:spittet/bitbucket-pipelines-services-tutorial.git

Maintenant, allez dans votre dépôt local et exécutez la commande npm install pour installer les dépendances requises par l'application.

cd bitbucket-pipelines-services-tutorial/ npm install

Avant d'exécuter l'application, nous devons démarrer une nouvelle instance de MongoDB. Grâce à Docker, vous pouvez facilement le faire depuis votre terminal.

docker run --name mongodb -d -p 27017:27017 mongo

Démarrez ensuite votre application et allez à l'adresse http://localhost:3000 pour la voir en action.

npm start

Vous pouvez aller à l'adresse http://localhost:3000/visits pour vous assurer qu'une visite a été correctement consignée dans la base de données.

Enfin, il convient de s'assurer que les tests sont correctement réalisés en local à l'aide de la commande npm test. Une fois cette commande exécutée, vous devriez observer la réalisation de deux tests.

npm test

Cet exemple d'application exécute deux tests différents :

  • L'un vérifie que l'application affiche Hello World sur la page d'accueil.
  • L'autre vérifie qu'une nouvelle visite est consignée dans la base de données chaque fois que quelqu'un accède à la page d'accueil.

Le premier test réussira même si la base de données est en panne, mais le deuxième est un test d'intégration qui vérifie que l'application web interagit correctement avec le serveur de base de données. Il peut également être considéré comme un test fonctionnel puisqu'il vérifie certaines des exigences métier de l'application. Vous pouvez consulter notre guide pour en savoir plus sur les différents types de tests.

Nous allons maintenant voir comment vous pouvez utiliser Bitbucket Pipelines pour automatiser les tests de votre application et la configurer pour qu'elle fonctionne avec une base de données.

Étape 2 : Exécutez automatiquement des tests grâce à Bitbucket Pipelines

Créez tout d'abord un dépôt dans votre compte Bitbucket et mettez à jour l'URL distante d'origine pour qu'elle pointe vers votre dépôt Bitbucket.

git remote set-url origin git@bitbucket.org:<my account>/<my repository>.git git push origin main 

Accédez à la section Pipelines de votre dépôt pour activer Bitbucket Pipelines.

Vous pouvez utiliser le modèle JavaScript par défaut dans l'écran suivant. Il contient déjà les commandes npm install et npm test dont vous avez besoin pour installer les dépendances et exécuter la suite de tests.

Ne changez rien dans la configuration YML et commitez votre fichier bitbucket-pipelines.yml. Le service de base de données est absent, mais nous l'ajouterons plus tard.

Une fois que vous aurez commité votre fichier, vous serez redirigé vers la section Pipelines de votre dépôt où vous pourrez voir votre premier pipeline en cours d'exécution. Votre pipeline échouera parce que le deuxième test ne peut pas être exécuté correctement sans une connexion à la base de données. Si vous cliquez sur votre pipeline, vous devriez voir un écran similaire à celui ci-dessous où il est indiqué qu'un test a réussi et que l'autre a échoué.

Dans la section suivante, nous allons résoudre ce problème en ajoutant une nouvelle définition de service à votre configuration Pipelines.

Étape 3 : Ajoutez une définition de service pour la base de données

Grâce à Bitbucket Pipelines, vous pouvez exécuter jusqu'à trois conteneurs Docker supplémentaires en plus de l'application principale exécutée dans un pipeline. Vous pouvez utiliser ces conteneurs pour exécuter des services tels qu'un magasin de données, un outil d'analyse ou tout autre service tiers dont votre application peut avoir besoin pour compléter le pipeline. Dans notre cas, nous utiliserons un conteneur de service séparé pour exécuter MongoDB.

Accédez à la section Source de votre dépôt pour voir la liste des fichiers.

Cliquez sur le fichier de configuration bitbucket-pipelines.yml pour y accéder. Vous trouverez un bouton d'édition dans le coin supérieur droit qui vous permettra de modifier le fichier et de le commiter directement depuis votre navigateur.

Nous devons ajouter une définition de service pour notre base de données à la fin du fichier de configuration.

bitbucket-pipelines.yml

# This is a sample build configuration for Javascript (Node.js). # Check our guides at https://confluence.atlassian.com/x/14UWN for more examples. # Only use spaces to indent your .yml configuration. # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: node:4.6.0   pipelines:   default:     - step:         script: # Modify the commands below to build your repository.           - npm install           - npm test definitions:   services:     database:       image: mongo  

Dans le cas de MongoDB, nous n'avons pas besoin de paramètres supplémentaires dans la définition de l'image, mais certaines images Docker pour les bases de données et les services peuvent nécessiter que vous spécifiiez certaines variables d'environnement. Vous trouverez une liste d'exemples de bases de données dans la documentation de Bitbucket Pipelines.

Avant de commiter le fichier, vous devez ajouter le nouveau service au niveau de l'étape qui exécute les tests. La configuration finale de Pipelines devrait ressembler au code ci-dessous.

bitbucket-pipelines.yml

# This is a sample build configuration for Javascript (Node.js). # Check our guides at https://confluence.atlassian.com/x/14UWN for more examples. # Only use spaces to indent your .yml configuration. # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: node:4.6.0   pipelines:   default:     - step:         script: # Modify the commands below to build your repository.           - npm install           - npm test         services:           - database definitions:   services:     database:       image: mongo

Allez dans votre section Pipelines après avoir commité le fichier pour voir le pipeline en cours d'exécution. Il devrait normalement se terminer avec succès.

Vous pouvez cliquer sur l'onglet correspondant à la base de données dans le panneau des journaux pour afficher les journaux du conteneur MongoDB.

Voilà, le tour est joué ! Vous savez maintenant comment ajouter des services à votre pipeline pour exécuter des tests d'intégration. N'oubliez pas de lire la documentation pour en savoir plus sur l'utilisation de ces services.