Tutorial zu Integrationstests mit Bitbucket Pipelines

Erfahre, wie du Integrationstests mit Bitbucket Pipelines durchführen kannst, indem du mehrere Services in separaten Docker-Containern innerhalb der Pipeline ausführst.

Sten Pittet Sten Pittet

Testen ist ein wichtiger Teil der Continuous Integration und der Continuous Delivery. Und bei der Anwendung des Continuous Deployments ist es die allerletzte Möglichkeit, gegen Bugs vorzugehen, bevor die Änderungen für deine Kunden veröffentlicht werden. Unit-Tests validieren einzelne Methoden und Klassen und sind ein guter Anfang, um Probleme zu vermeiden. Aber du solltest auch Integrationstests durchführen, um sicherzustellen, dass die unterschiedlichen Module deiner Anwendung (Anwendungsserver, Datenbank, Cache) korrekt miteinander interagieren. In diesem Tutorial werden wir sehen, wie du mit Bitbucket Pipelines Integrationstests durchführen kannst, indem du mehrere Dienste in separaten Docker-Containern in einer Pipeline laufen lässt.

Anforderungen

Schritt 1: Lokales Ausführen der Beispielanwendung

Wir verwenden eine grundlegende Node.js‑Anwendung, die eine Meldung auf der Startseite anzeigt und Besuche in einer Datenbank protokolliert. Um dich auf die Konfiguration von Bitbucket Pipelines zu konzentrieren, kannst du die Anwendung von deinem Terminal aus einfach klonen.

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

Gehe jetzt zu deinem lokalen Repository und führe npm install aus, um die von der Anwendung benötigten Abhängigkeiten zu installieren.

cd bitbucket-pipelines-services-tutorial/ npm install

Bevor wir die Anwendung ausführen, müssen wir eine neue MongoDB-Instanz starten. Dank Docker kannst du das ganz einfach von deinem Terminal aus tun.

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

Starte dann deine Anwendung und gehe zu http://localhost:3000, um sie in Aktion zu sehen.

npm start

Du kannst zu http://localhost:3000/visits gehen, um sicherzustellen, dass ein Besuch korrekt in der Datenbank protokolliert wurde.

Abschließend vergewissern wir uns, dass die Tests lokal erfolgreich abgeschlossen werden. Dazu verwenden wir den Befehl "npm test". Nach Ausführung dieses Befehls solltest du sehen können, dass zwei Tests abgeschlossen werden.

npm test

Diese Beispielanwendung führt zwei unterschiedliche Tests aus:

  • Einen Test, der bestätigt, dass die Anwendung "Hello World" auf der Startseite anzeigt.
  • Einen Test, der bestätigt, dass ein neuer Besuch in der Datenbank protokolliert wird, wenn jemand auf die Startseite zugreift.

Der erste Test wird auch dann bestehen, wenn die Datenbank ausgefallen ist, aber der zweite Test ist ein Integrationstest, der überprüft, ob die Webanwendung ordnungsgemäß mit dem Datenbankserver interagiert. Er könnte auch als Funktionstest verstanden werden, da er einige der Geschäftsanforderungen der Anwendung überprüft. In unserem Benutzerhandbuch erfährst du mehr über die verschiedenen Testtypen.

Sehen wir uns jetzt an, wie du Bitbucket Pipelines für die Automatisierung deiner Anwendungstests nutzen kannst und wie du es für die erfolgreiche Verwendung mit einer Datenbank konfigurierst.

Schritt 2: Automatisches Ausführen von Tests mit Bitbucket Pipelines

Beginne mit der Erstellung eines neuen Repositorys in deinem Bitbucket-Konto und update die Remote-URL, sodass origin auf dein Bitbucket-Repository verweist.

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

Gehe zum Pipelines-Abschnitt deines Repositorys, um Bitbucket Pipelines zu aktivieren.

Du kannst die standardmäßige Javascript-Vorlage im nächsten Bildschirm verwenden. Sie enthält bereits die Befehle "npm install" und "npm test", die du brauchst, um Abhängigkeiten zu installieren und die Testsuite aufzuführen.

Ändere nichts an der YML-Konfiguration und committe deine bitbucket-pipelines.yml-Datei. Der Datenbankdienst fehlt, aber wir werden ihn später hinzufügen.

Sobald du deine Datei committest, wirst du zum Pipelines-Abschnitt deines Repositorys weitergeleitet, wo du deine erste Pipeline in Bearbeitung sehen kannst. Deine Pipeline wird fehlschlagen, da der zweite Test ohne Datenbankverbindung nicht korrekt durchgeführt werden kann. Wenn du durch deine Pipeline klickst, müsstest du einen ähnlichen Bildschirm wie unten sehen, der mitteilt, dass 1 Test bestanden wurde und 1 Test fehlgeschlagen ist.

Im nächsten Abschnitt werden wir dieses Problem beheben, indem wir deiner Pipelines-Konfiguration eine neue Dienstdefinition hinzufügen.

Schritt 3: Hinzufügen einer Dienstdefinition für die Datenbank

Mit Bitbucket Pipelines kannst du bis zu drei zusätzliche Docker-Container auf der Hauptanwendung, die in einer Pipeline läuft, ausführen. Du kannst diese Container nutzen, um Dienste wie einen Datenspeicher, ein Analysetool oder einen beliebigen Drittanbieterdienst auszuführen, den deine Anwendung möglicherweise zur Vervollständigung der Pipeline benötigt. In unserem Fall verwenden wir einen separaten Service-Container, um MongoDB auszuführen.

Gehe zum Quellbereich deines Repositorys, um die Liste der Dateien zu sehen.

Klicke auf die Konfigurationsdatei bitbucket-pipelines.yml, um darauf zuzugreifen. In der oberen rechten Ecke findest du eine Schaltfläche "Bearbeiten", mit der du die Datei bearbeiten und direkt aus deinem Browser heraus committen kannst.

Am Ende der Konfigurationsdatei müssen wir eine Dienstdefinition für unsere Datenbank hinzufügen.

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  

Im Fall von MongoDB benötigen wir keine zusätzlichen Einstellungen in der Image-Definition, aber bei manchen Docker-Images für Datenspeicher und -Dienste musst du möglicherweise einige Umgebungsvariablen angeben. Eine Liste von Datenbankbeispielen findest du in der Dokumentation zu Bitbucket Pipelines.

Bevor du die Datei committest, musst du den neuen Dienst zu dem Schritt hinzufügen, der die Tests ausführt. Die endgültige Pipelines-Konfiguration sollte wie der folgende Code aussehen.

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

Gehe nach dem Committen der Datei zu deinem Pipelines-Abschnitt, um die Pipeline in Bearbeitung zu sehen. Sie sollte normalerweise erfolgreich abgeschlossen werden.

Du kannst im Protokoll-Panel auf die Registerkarte "Datenbank" klicken, um die Protokolle des MongoDB-Containers zu sehen.

Das war's! Du weißt jetzt, wie du deiner Pipeline Dienste hinzufügst, um Integrationstests durchzuführen. Denk daran, die Dokumentation zu lesen, um mehr über die Verwendung dieser Dienste zu erfahren.