
Inhaltsverzeichnis
Automatisierte Tests vor dem Deployment sind Standard – doch was passiert, nachdem der Code produktiv gegangen ist? Genau hier setzen Post-Deployment-Tests an. Sie prüfen, ob der Dienst auch wirklich wie erwartet online ist und auf reale Anfragen korrekt reagiert.
In diesem Artikel zeige ich dir, wie ich Bruno, ein Open-Source-API-Testing-Tool, in meinen Forgejo Actions-Workflow eingebunden habe, um meine FastAPI-Anwendung direkt nach dem Deployment zu testen.
Was ist Bruno?
Bruno ist ein schlankes Tool zum Schreiben und Ausführen von API-Tests in einer lokalen, dateibasierten Umgebung. Es speichert Test-Fälle im Klartext in einem Git-Repository – ideal für CI/CD-Prozesse.
Zu Bruno und was man damit machen kann, habe ich hier einen eigenen Blog-Post geschrieben.
Der CI/CD-Workflow
Hier eine kurze Übersicht über meinen Workflow, umgesetzt mit Forgejo Actions (kompatibel zu GitHub Actions):
- Checkout & Test mit
pytest
- Docker-Build & Deployment bei Tag-Pushes
- Post-Deployment-Tests mit Bruno, sobald die App live ist
Integration von Bruno in den Post-Deployment-Job
Nach erfolgreicher Ausführung des test-and-deploy
-Jobs wird automatisch ein zweiter Job post-deploy
gestartet. Darin wird Bruno verwendet, um eine zuvor definierte Test-Collection gegen die produktive API auszuführen.
Hier der relevante Ausschnitt aus dem Workflow:
jobs:
test-and-deploy:
runs-on: ubuntu-latest
steps:
# ....
post-deploy:
runs-on: ubuntu-latest
needs: test-and-deploy
if: success() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Bruno CLI runner
id: bru-cli
uses: krummbar/bruno-run-action@main
with:
path: ./bruno-collection
env: production
env-vars: |-
api_key='${{ "secrets.PRODUCTION_API_KEY" }}'
Den API-Key legt man in Forgejo in den Projekt-Einstellungen als Secret ab. Das gleiche geht natürlich auch, wenn ihr Github verwendet.
Wichgig! Die Variable env-vars
für die Action bezieht sich nicht auf Betriebssystem Environment Variablen sondern auf das Bruno-Environment!
Im Beispiel verwende ich die Action von krummbar/bruno-run-action
. Wenn ihr etwas eigenes nutzen wollt, müsst ich euch das Tool bru CLI Tool über npm installieren.
Bruno-Setup im Repository
In deinem Repository brauchst du:
- Einen Ordner wie
bruno-collection
odercollection.bru
- Eine passende Umgebungskonfiguration (
production
) mit Variablen wiebase_url
undapi_key
- Test-Suites, die auf echte Endpunkte zielen – z. B.
GET /health
,POST /login
, etc.
Der Vorteil: Bruno nutzt einfache JSON- oder .bru
-Dateien, die du versionieren, reviewen und lokal ausführen kannst.
Wie sieht so ein Test in Bruno aus?
In Bruno kann man aufwendige Tests scheiben, die verschiedene Logiken prüfen.
Dazu gibt es noch die Möglichkeit sehr einfache Prüfungen über Asserts
zu erstellen.
Für meine Post-Deployment Tests haben ein paar Asserts ausgereicht. Diese prüfen auf den HTTP Status Code den ich erwarte und testen noch ein paar Rückgabewerte aus dem Response-Body.
In Bruno legt man sich am besten auch ein "dev" Environment an. Dann kann man die Tests auch erst einmal gegen die lokale Entwicklungsversion laufen lassen.
Die Post-Deployment Checks lässt man dann gegen ein zweites Environment laufen.
Post Deployment Test in Aktion
So sieht so ein einfacher Post-Deployment Test dann bei mir in meinem Forgejo aus.
Das eine oder andere mal wurde inzwischen auch erkannt, dass die Anwendung defekt ist, obwohl die Tests vor dem Deployment erfolgreich waren. Es kann eben immer mal etwas sein.
Vorteile dieser Lösung
- Schneller Feedback-Loop: Funktioniert der Live-Service wirklich?
- Transparente Test-Cases: Klar lesbar und versionierbar
- Zero-Setup: Kein zusätzlicher Test-Server nötig – der Live-Endpunkt ist die Bühne
Fazit
Post-Deployment-Tests mit Bruno sind eine einfache, aber effektive Möglichkeit, die Stabilität deiner API nach dem Rollout zu sichern. Die Integration in GitHub- oder Forgejo-Actions ist dabei unkompliziert und fügt sich nahtlos in bestehende CI/CD-Prozesse ein.
Wenn du also sicherstellen willst, dass dein Deployment nicht nur "grün gebaut", sondern auch wirklich funktional produktiv ist – probier Bruno aus.