Close

Tutorial zu Integrationstests mit Bitbucket Pipelines

Porträt von Sten Pittet
Sten Pittet

Gastautor

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

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.

Uhrzeit

30 Minuten

Zielpublikum

Continuous Integration und/oder Bitbucket Pipelines sind neu für dich

Voraussetzungen

  • Ein Bitbucket-Konto
  • Node v4.6 oder höher zum Ausführen der Anwendung

  • Docker Community Edition v17.03 oder höher zum Ausführen von MongoDB auf Ihrem lokalen Rechner

  • Ein Terminal zum Ausführen von Bash-Befehlen
  • Git zum Verwalten des Repositorys und für Push-Übermittlungen zurück an Bitbucket Cloud

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 add bitbucket git@bitbucket.org:<account name>/<repository name>.git
git branch -m mainline
git push -u bitbucket mainline

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.

Die bitbucket-pipelines.yml-Datei sollte ungefähr so aussehen.

image: node:16

pipelines:
  default:
    - parallel:
        - step:
            name: Build and Test
            caches:
              - node
            script:
              - npm install
              - npm test

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

image: node:16

pipelines:
  default:
    - step:
        script:
          - 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

image: node:16

pipelines:
  default:
    - step:
        script:
          - 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.

Sten Pittet
Sten Pittet

Ich bin seit 10 Jahren in der Softwarebranche tätig und hatte schon verschiedene Positionen inne, unter anderem in der Entwicklung und im Produktmanagement. Nachdem ich in den letzten 5 Jahren bei Atlassian an Entwickler-Tools gearbeitet habe, schreibe ich jetzt über das Erstellen von Software. In meiner Freizeit feile ich zusammen mit meinem Kleinkind an meinen Kompetenzen als Vater.


Diesen Artikel teilen
Nächstes Thema

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Abbildung: DevOps

DevOps-Community

Abbildung: DevOps

DevOps-Lernpfad

Abbildung: Karte

Kostenlos loslegen

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up