Continuous Testung von Applikationen stellt in der heutigen schnelllebigen Zeit neue Anforderungen and Entwickler aber auch die Infrastruktur. Es braucht Konzepte wie die Qualität sichergestellt werden kann ohne die Arbeitsabläufe zu sehr einzuschränken oder zu verzögern. Wie Continuous Testing aussehen kann, beschreiben wir hier anhand eines realen Beispiels.
Das Team von Entwicklern arbeitet täglich mit dem VCS Git und GitHub zur zentralen Verwaltung des Codes. Als Basis für die Code Verwaltung dient das GitFlow Modell, welches weit verbreitet ist. Die Entwickler erstellen Feature Branches welche dann mit einem Pull Request auf GitHub zurück in das Stammverzeichnis geführt werden. Bevor nun der Pull Request frei gegeben wird, werden die Tests ausgeführt. Damit dies funktioniert, sind verschiedene Voraussetzungen zu erfüllen:
UI Tests
Die UI Tests wurden mit Codeception erstellt, und werden mit Phantomjs ausgeführt. Phantomjs ermöglicht das Headless Testen der Applikation und ist einfach zu installieren. Codeception ist so konfiguriert, dass vor jedem ausführen eines Tests, ein Dump der Datenbank eingespielt wird. Danach wird mit Migrations die Datenbank auf das zu Testende Level migriert, somit sind die Voraussetzungen für jeden Test identisch.
Mock Services
Für sämtliche Kommunikation zu Drittsystemen z.B. via REST werden einfache Mock Services zu Verfügung gestellt. Diese können z.B: mit node.js einfach erstellt und deployed werden. Alles services geben vordefinierte Daten zurück, dies vereinfach das Testen.
Pull Request Builder
Für jeden Pull Request welcher erstellt wird, wird ein GitHub Webhook ausgeführt. Dieser löst ein nur für diesen Pull Request gültigen Build der Applikation aus. Der Build wird z.B. mit OpenShift erstellt. Sobald eine vollständig lauffähige Applikation erstellt wurde, können die UI Tests ausgeführt werden. Sind die Tests erfolgreich, so kann der Pull Request bestätigt werden, ansonsten ist er blockiert. Als schöner Nebeneffekt steht der Build dann auch den Stackeholdern zum ausprobieren und testen bereit.