Testumgebung erstellen automatisieren

Einleitung

Zur Testumgebung gehört mehr als nur die Startumgebung. Es ist auch ein Tester nötig, den ich natürlich auch wieder in der Form eines Containers erstelle. Der Tester wird mit einem Job durch Jenkins angesprochen.

Ich habe bisher heraus gefunden, dass auch der Job durchaus erst mal verschiedene andere Aufgaben zu erledigen hat, bis die Tests laufen können.Daher habe ich diesen Job als einfaches Shell-Script angelegt.

Hier kann man zum Beispiel prüfen, ob die Datenbank im Ausgangszustand ist. Codeception hat die Angewohnheit, eine Datei in einem speziellen Ordner anzulegen, wenn ein Test daneben gegangen ist. Diese Datei wird bei jedem Start von Tests per Codeception gelöscht. Das bedeutet: Wenn die Datei vorhanden ist, wenn ein neuer Testlauf stattfinden soll, dann ist nicht gewährleistet, dass die Datenbank in einem definierten Ausgangszustand ist. Sie muss sicherheitshalber zurück gesetzt werden.

Dann startet das Script die Infrastruktur, also Mailserver, DB und Webserver. In der Flex-Version werden nun die Dateien der IDE mit denen des Webservers synchronisiert. Damit kann man entwickeln und mit Containern testen. Das ist vor allem für die Akzeptanz- und Funktionstests nötig. Wenn Integrationstests gemacht werden sollen, dann kann an dieser Stelle das neue Installationspaket gebaut werden, bevor es verwendet wird.

Schließlich wird der eigentliche Testcontainer aufgerufen, auch wieder eine Sache per Docker Compose, weil ja das Netzwerk der Infrastruktur gebraucht wird. Man gibt an, auf welchem Image aufgebaut werden soll (z.B. verschiedene php-Versionen). Dann werden externe Ordner eingebunden, es wird das Arbeitsverzeichnis definiert, Umgebungsvariablen in den Container weiter gereicht und ein Startscript angegeben.

Das Startscript des Testcontainers schließlich kümmert sich um den Ablauf der Tests:

  • Headless-Display starten
  • Webtreiber starten
  • Selenium starten
  • Videoaufnahme des Browserfensters starten. Name und Ablageort des Videos werden aus Umgebungsvariablen gebildet.
  • Tests laufen lassen. Hier müssen neben den einzelnen Namen auch die Namen der Reports in XML und HTML angepasst werden. Jenkins nicht vergessen.
  • Aufnahme beenden
  • Headless-Display beenden

Schließlich darf man nicht vergessen, die neue Testumgebung Codeception auch bekannt zu machen. Das wird mit einem Eintrag in der acceptance.suite.yml erledigt.