Mit Newman Postman Kollektionen ausführen
Kategorie Software Engineering | 1 Kommentar »
Heute hat mir ein Kollege ein cooles Tool gezeigt: Newman Mit Newman kann ich Kollektionen von Postman beliebig oft per Kommandozeile ausführen. Und richtig geekig wird die Sache, wenn ich dazu noch einen Docker Container benutze, damit ich nichts installieren muss…
Postman Kurzüberblick
Postman ist ein Desktop Tool, um API Beispiel-Requests zu verwalten. Ich sammle in Postman alle HTTP Requests, die ich zum Testen und Entwickeln von Backends benötige. Die Requests kann ich in Kollektionen organisieren.
Requests können dynamisch in Postman sein. So kann zum Beispiel das Ergebnis aus dem ersten Request in einem anderen Request als Eingabe verwendet werden. Ich kann auch Werte zufällig erzeugen lassen.
Neben den Requests kann ich auch Umgebungen definieren. Dadurch muss ich nicht für jede Umgebung den gleichen Request mit leicht unterschiedlicher URL erneut definieren. Das ist alles sehr komfortabel.
Newman
Am Ende ist Postman aber ein Klickibunti Werkzeug. Möchte ich immer die gleiche Sequenz von Requests abschicken, muss ich mich immer wieder durch die Oberfläche klicken. Und ich kann natürlich Postman nur auf Rechnern mit einer grafischen Oberfläche nutzen. Möchte ich meine Requests hingegen von einem bestimmten Server aus abschicken, benötige ich ein anderes Werkzeug: Newman
Newman ist ein Kommandozeilenwerkzeug. Beim Start übergibt man eine JSON Datei, die eine aus Postman exportierte Kollektion enthält. Newman arbeitet alle enthaltenen Requests ab. Per Option kann ich Newman anweisen, die Kollektion X-fach abzuarbeiten.
Newman wird normalerweise mit dem Javascript Paketmanager NPM installiert. Es benötigt für seine Ausführung eine Node.js Umgebung.
sudo npm install -g newman
Nach der Installation kann ich Newman folgendermaßen starten:
newman run pfad-zum-verzeichnis-mit-kollektionen/kollektion.json -n 1000
Dieser Befehl startet Newman und für die Postman Kollektion in der Datei kollektion.json 1.000mal aus. Am Ende spuckt Newman eine Zusammenfassung aus:
┌─────────────────────────┬─────────────────┬─────────────────┐
│ │ executed │ failed │
├─────────────────────────┼─────────────────┼─────────────────┤
│ iterations │ 1000 │ 0 │
├─────────────────────────┼─────────────────┼─────────────────┤
│ requests │ 1000 │ 0 │
├─────────────────────────┼─────────────────┼─────────────────┤
│ test-scripts │ 0 │ 0 │
├─────────────────────────┼─────────────────┼─────────────────┤
│ prerequest-scripts │ 0 │ 0 │
├─────────────────────────┼─────────────────┼─────────────────┤
│ assertions │ 0 │ 0 │
├─────────────────────────┴─────────────────┴─────────────────┤
│ total run duration: 14.9s │
├─────────────────────────────────────────────────────────────┤
│ total data received: 63kB (approx) │
├─────────────────────────────────────────────────────────────┤
│ average response time: 3ms [min: 2ms, max: 70ms, s.d.: 2ms] │
└─────────────────────────────────────────────────────────────┘
Newman per Docker Container ausführen
Nun verfügt nicht jeder Server über eine Node.js Umgebung und generell möchte ich auch nicht auf jedem Server Newman installieren. Falls der Server über Docker verfügt, kann ich einen Docker Container nutzen, in dem Newman installiert ist. Dazu hole ich mir einmalig das entsprechende Docker Image:
docker pull postman/newman
Nun kopiere ich die Postman Kollektion sample.json auf den Server und speichere sie in einem Verzeichnis ~/newman. Anschließend starte ich das Newman Docker Image und mappe das lokale Verzeichnis mit der Postman Kollektion in den Container als Docker Volumen.
docker run -v ~/newman:/collections -t postman/newman run "/collections/sample.json" -n 1000
Newman startet in dem Docker Container und führt meine Kollektion aus. Am Ende gibt es die gewohnte Zusammenfassung und der Container wird automatisch beendet.
Achtung: Newman ist kein Werkzeug für Load Testing
Leider gibt es keine Option in Newman, um mehrere Requests parallel auszuführen. Ich kann damit Newman nicht für Load Testing verwenden. Natürlich kann ich in mehreren Terminals mehrere Newman Docker Container starten, aber das ist natürlich nur eine Hilfslösung.
Leider kann ich Newman auch nicht dazu bringen, nicht jeden Request auszugeben, sondern nur die Zusammenfassung am Ende. Mit der Option
--reporter-silent
gibt es gar keine Ausgabe mehr. Auch nicht sehr hilfreich.
Trotzdem ist Newman ein tolles Werkzeug, um ausgeklügelte Postman Kollektionen wiederholt auszuführen!
Ich habe noch nicht ganz verstanden was ein Autor und ein Schauspieler jetzt mit WebServices zu tun haben.