Automatisieren Sie Ihre API-Tests mit Jenkins, Postman und Newman

Ein kleiner Hintergrund

Heutzutage sind CI-Pipelines ein Muss an unserem Entwicklungstag und helfen uns, Lieferzyklen zu verkürzen und qualitativ hochwertigere Software zu liefern.

Als Backend-Entwickler sind APIs für die meisten meiner Anwendungen zu einem Eckstein geworden, daher wurde das Testen zu einem Muss.

Eine API-Testphase in unserer CI-Pipeline gibt uns Vertrauen in die Qualität des Produkts und warnt uns, wenn etwas kaputt gegangen ist.

Postman

Postman ist ein großartiges Tool, das Entwicklern in jeder Phase unseres API-Lebenszyklus hilft. Es hat eine großartige Dokumentation und eine wachsende Community von Entwicklern, die es verwenden, so dass es leicht ist, Beiträge zu finden, die coole Tipps und Tricks erklären.

Sammlungen

Postman macht es einfach, unsere verschiedenen Anfragen in Sammlungen zu organisieren. Persönlich erstelle ich eine Sammlung für jedes Projekt, das ich testen möchte. Dann erstelle ich innerhalb der Sammlung einen Ordner für jede Entität im Projekt und versuche, jeden Endpunkt in der API abzudecken.

Anfragen nach Sammlungen

Anfragen werden nach Entitäten organisiert

Umgebungen

Postman ermöglicht es uns, verschiedene Umgebungen zu erstellen, um unsere Anforderungen auszuführen. Als reales Beispiel würde ich Ihnen sagen, dass ich in drei verschiedenen Umgebungen arbeite: meiner lokalen Umgebung, einer Staging-Umgebung und einer Produktionsumgebung, also erstelle ich drei verschiedene Umgebungen mit Variablen, die die sich ändernden Daten zwischen den Umgebungen darstellen (wie der Basispfad für die API-Anforderungen). Auf diese Weise kann ich eine einzelne Anfrage definieren, sie aber problemlos auf meine drei verschiedenen Umgebungen ausrichten. Überlegen Sie, wie einfach es wäre, eine neue Umgebung zu ändern oder hinzuzufügen!

Verwenden von Umgebungsvariablen auf Anfrage url

Extrahieren des Basispfads als Umgebungsvariable für verschiedene Umgebungen

Testanforderungen

Eine der größten Funktionen von Postman ist, dass Sie Tests codieren können, die jedes Mal ausgeführt werden, wenn eine Anforderung ausgeführt wird. Sie sind in JS geschrieben und haben eine coole Reihe von Behauptungen, um Dinge wie den Antwortcode zu überprüfen, Antwortkörper o Antwortheader.

Eine Anfrage mit wenigen Tests

Eine Anfrage mit wenigen Tests

Süß! Sobald wir eine Testsuite geschrieben haben, um unsere API abzudecken, verwenden wir den Collection Runner, ein integriertes Tool, das von Postman bereitgestellt wird, um jede Anforderung einer Sammlung auszuführen und einen Bericht über die Testergebnisse auszugeben.

 Sammlung runner prüfbericht

Wie schön sind die grünen Wiesen…

Prämie: Manchmal möchten wir unsere Anfragen in einer bestimmten Reihenfolge ausführen und raten Sie mal was? Postman ermöglicht es uns, es zu tun! Überprüfen Sie es unter building workflows issue

Was haben wir bisher?

An dieser Stelle haben wir eine Postman-Sammlung mit einer Reihe von Anforderungen erstellt, die auf unsere API in allen unseren Umgebungen abzielen könnten. Außerdem hat jede Anfrage mehrere Tests, um zu überprüfen, ob sie richtig funktioniert. Was für eine Zeit am Leben zu sein!

Newman

Erinnerst du dich an den Sammlungsläufer, den ich zuvor erwähnt habe? Es könnte jede Anfrage in unserer Sammlung mit einem einfachen Klick ausführen. Aber was ist mit einem Befehlszeilentool, um dasselbe zu tun? Newman tut es. Newman ist ein Befehlszeilensammlungsläufer für Postman, mit dem Sie eine Postman-Sammlung direkt von der Befehlszeile aus ausführen und testen und problemlos in CI-Server integrieren können.

Sammlung ausführen

Um eine Sammlung mit Newman auszuführen, müssen wir sie zuerst aus Postman exportieren. Da in einigen unserer Anforderungen einige Variablen herumspielen, müssen wir auch die geeignete Umgebung exportieren. Sobald wir beide Dateien haben, können wir die Sammlung mit ausführen:

$ newman run our.postman_collection.json -e our.postman_environment.json

und wir werden einen Bericht über den Sammlungslauf sehen, ähnlich wie bei anderen Test-Frameworks.

Newman CLI Testbericht

Newman CLI Testbericht

Formatieren der Ausgabe

Der Bericht kann auf verschiedene Arten formatiert werden. Um dies zu erreichen, stellt Newman eine Reihe von Reportern zur Verfügung, die verschiedene Ausgabeformate wie JSON, XUNIT oder HTML unterstützen. Außerdem können Sie Ihren eigenen Reporter erstellen, um den Bericht in einem beliebigen Format zu formatieren.

Jenkins

Cool, wir haben unsere API-Testsuite mit Postman definiert und können sie über die Befehlszeile ausführen und einen schönen Bericht über die bisherigen Ergebnisse mit Newman erhalten. Aber jetzt wollen wir unsere großartige neue Fähigkeit in unsere CI-Pipeline aufnehmen.

Haftungsausschluss: Wir verwenden Jenkins als Automatisierungsserver zum Aufbau unserer CI / CD-Pipelines und führen unsere CI-Pipeline in einem Docker-Container aus, in dem alle erforderlichen Tools installiert sind (z. B. Newman).

Durcheinander bringen

Im Wesentlichen benötigen wir drei Dateien, um unseren API-Test in eine CI-Pipeline aufzunehmen:

  • Jenkinsfile, die unsere Pipeline definiert
  • Postman Collection, die unsere Anforderungen und Tests definiert
  • Postman Environment, die die Variablen der Zielumgebung definiert

Wir fügen alle in das Projekt-Repository ein, damit wir von der Versionskontrolle über sie profitieren und ihre Änderungen verfolgen können.

Genug geredet, lass uns codieren!

Wir müssen eine neue Phase in unserer Pipeline erstellen, um den API-Test auszuführen. Normalerweise setzen wir es nach Unit- und Integrationstests ein, um sicherzustellen, dass alles wie erwartet läuft, bevor wir die Schnittstelle testen.

pipeline { ... stage('Test API Rest') { steps { sh 'newman run tests/Newman/our.postman_collection.json -e tests/Newman/env/test.postman_environment.json -r junit,html --reporter-junit-export var/reports/newman/junit/newman.xml --reporter-html-export var/reports/newman/html/index.html' publishHTML() } } ...}

Wie Sie sehen, rufen wir den Befehl run von Newman auf und stellen unsere Sammlung und die Testumgebungsdatei als Parameter bereit. Außerdem geben wir an, welche Formate wir verwenden möchten (JUNIT, HTML) und wo die Ausgaben gespeichert werden.

Als Bonus verwenden wir das HTML PUblisher Jenkins Plugin, um den HTML-Bericht mit dem Build zu verknüpfen.

Ich hoffe, Sie haben diese Reise genauso genossen wie ich und wie immer sind Rückmeldungen willkommen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.