PHP Behat API Tests automatisieren auf dem CI (Bamboo)

[ChAoZ]

Rear Admiral
Registriert
Jan. 2010
Beiträge
5.288
Hallo Leute,

ich habe Behat Tests bei uns im Projekt eingeführt, soweit so gut, laufen durch.
Nun würde ich diese Tests gern automatisieren und in die bestehende Pipeline integrieren.

Die Tests benötigen alle Abhängigkeiten, wie Datenbank, Caching, zentrale Datenhaltung (Backend Backend^^), diese kann ich also nicht wie UnitTests "isoliert" laufen lassen auf dem CI. Gebaut und ausgeliefert wird mit Docker.

Soooo... nun zu meiner Problematik.
Behat ist kein "standalone" Service, es wird aus dem Projekt heraus gestartet, wie die UnitTests eben.
Durch die Abhängigkeiten zur Infra (DB/Caching usw.) müsste ich ALLES auf dem CI hochfahren, die Tests ausführen und wieder runterfahren. Das hört sich für mich in der Theorie nicht sonderlich sauber an.

Wie ist bei solchen Tools das "korrekte" Vorgehen?

Eine eigene Testumgebung dafür schaffen?
Auf dem CI ausführen und hinterher alles aufräumen?

Bin gespannt auf eurer Meinungen.
Danke
 
Reden wir von Unit-Tests oder Integrationstests?

Also meiner Meinung nach sollte da im Rahmen der CI entsprechend notwendige Server gestartet/gestoppt werden - könnten ja auch mehrere Läufe gleichzeitig sein.

Gibt es Gründe, warum nicht z.B. PHPUnit verwendet wird?
 
tollertyp schrieb:
Reden wir von Unit-Tests oder Integrationstests?
Ehr Intergration als Unit aber auch nicht so richtig.
Behat Tests brauchen kein UI für das Testing, sie feuern Requests gegen die APIs der App und erwarten ein JSON als Antwort welches sie dann auswerten.

tollertyp schrieb:
Also meiner Meinung nach sollte da im Rahmen der CI entsprechend notwendige Server gestartet/gestoppt werden - könnten ja auch mehrere Läufe gleichzeitig sein.
Ich müsste auf dem Bamboo via Docker-Compose erstmal alles starten, MySql, Redis, MailHog usw. erst dann könnte ich die Tests abfeuern. Kostet halt Zeit und vor allem Ressourcen. Nach dem Durchlauf wird ALLES wieder gelöscht.

tollertyp schrieb:
Gibt es Gründe, warum nicht z.B. PHPUnit verwendet wird?
Verwenden wir bereits.

Behat soll sich zwischen UnitTests und den CypressTests (Intergration) einfügen und so das Backend (reines API Gateway) testen ohne die UI zu berücksichtigen.
 
Also wenn parallele Ausführung von Tests gegen die Datenbank/Cache kein Problem ist, oder wenn sichergestellt wird, dass nie mehrere Builds gleichzeitig laufen (kommt das überhaupt vor? also arbeitet ihr mit Branches und werden die dann auch gleich gebaut?), dann kann man ja schon eine dedizierte Testinfrastruktur bereitstellen.

Es ist nur unschön, wenn Testläufe halt von "externer Infrastruktur" abhängen. Aber nicht, dass es nicht oft genug gemacht wird.
 
Ja jeder Push nach Git triggert die Build Pipeline mit all den Tests und Quality Gate.

Würde die Behat Tests nur bei Änderung am Develop ausführen denke ich, nicht bei jedem Commit / Push.
 
Zurück
Oben