Im Repository findet sich die Rahmen des Artikels/Vortrags vorgestellte Beipielanwendung. Diese ermittelt anhand der Koordinaten des Webbrowsers einen Kleidungsvorschlag (in Form eines Bildes) für den aktuellen Tag.
Da der Fokus des Artikels/Vortrags auf Tools und Techniken rund um das Thema Integrations-Testen liegt, wurde der Darstellung wegen auf Unittests verzichtet.
Sämtliche Builds inklusive Tests bzw. mit aktiven - unter Punkt 3 genannten - Build-Profilen setzen eine laufende Docker-Instanz voraus. Inbesondere müssen der Laufzeitumgebung sämtliche Docker-Umgebungsvariablen (also DOCKER_HOST etc.) bekannt gemacht werden, sofern es sich bei der Docker-Umgebung um eine mit Docker-Machine bereitgestellte Umgebung handelt. Vor dem ersten Build mit aktivierten Docker-Profilen ist einmalig mittels des Befehls docker network create scripts_default ein Docker Netzwerk zu erzeugen.
Im verwendeten Browser muss ein Zugriff auf Geo-Koordinaten ermöglicht werden.
Wrapper-Projekt zum Erstellen eines mongoDB Docker-Images.
Spring Boot-Anwendung, die für Wetterbedingungen einen Kleidungsvorschlag in Form eines Bildes zur Verfügung stellt.
Die Persistenz wird (bei Bedarf) auf dem lokalen Rechner für jeden Buildlauf neu initialisiert. Konkret wird im Rahmen des Buildlaufs mit aktivem Build-Profil docker-environment der innerhalb testing-tools-mongodb erzeugte (frisch initialisierte) Docker-Container mittels eines Docker-Maven-Plugins "on the fly" gestartet und gestoppt. Sofern das Build-Profil docker-environment nicht aktiviert wurde, wird eine laufende mongoDB-Instanz auf localhost erwartet.
- Integration-Test, der mittels Springs Testframework exemplarisch integrativ die Funktionalität für den mongoDB-Zugriff testet.
- End-to-end-Test, der die von der Anwendung bereitgestellte Rest-Schnittstelle mittels REST-assured und Spring Boot's Testframework exemplarisch testet.
Spring Boot-Anwendung, die anhand von Geo-Koordinaten die zugehörigen aktuellen Wetterbedingungen durch Zugriff auf einen externen Wetter-Service ermittelt und per Rest-Schnittstelle bereitstellt.
Die Anwendung wird im Rahmen des Tests mittels des Spring Boot-Maven-Plugins initialisiert. Der externe Wetterdaten-Provider wird für Testläufe durch eine Attrappe ersetzt, die konstante Daten liefert und stabile reproduzierbare Tests ermöglicht. Konkret wird dies durch Aktivierung eines dedizierten Spring-Beanprofils erreicht.
- Integrative Smoke-Tests gegen den externen Wetterdaten-Provider. Diese werden bei Bedarf ausgeführt und mittels JUnit-Category aus den kontinuierlichen Build-Läufen entfernt.
- Exemplarischer Komponenten-Test, der die Anwendung mittels REST-assured integrativ testet.
- Exemplarischer Komponenten-Test, der mittels des Werkzeuges Pact den Kontrakt verifiziert, den der Benutzer des Service (testing-tools-clothing-frontend) spezifiziert hat. Entkoppelt die Verifikation des Zusammenspiels von Provider und Consumer.
Spring Boot und AngularJs basierte Anwendung, die das Benutzerinterface zur Gesamtanwendung darstellt.
- Integration-Test, der das Interaktionsverhalten für den Zugriff auf den vom Modul testing-tools-weather-service bereitgestellten Wetter-Service beschreibt und integrativ gegen einen vom Werkzeug Pact bereitgestellten Mock-Rest-Service testet, ohne tatsächlich auf den Wetter-Service-Provider zugreifen zu müssen. Der im Rahmen des Tests spezifierte und aufgenommene 'Kontrakt' (das Pact-File) wird im Buildlauf des Providers testing-tools-weather-service ebenfalls verifiziert (siehe 2.3).
Maven-Modul, dass die Anwendung mittels Selenium WebDriver End-to-end testet.
Die Gesamtanwendung wird bei aktivem Profil docker-environment auf einem Unix-basiertem System mittels Docker Compose - angesteuert durch das Exec Maven Plugin - gestartet. Der Build ist in diesem Falle plattform-spezifisch, da Compose zum Zeitpunkt des Artikels noch von keinem Maven-Plugin unterstützt wird. Im Normalfall würde man dies zu vermeiden versuchen und folglich solche Aufgaben auf einen zentralen Build-Server verlagern. Für einen erfolgreichen Build muss die Gesamtanwendung mit den Build-Profilen docker-image und docker-environment gebaut worden sein. Neben den Voraussetzungen aus Vorbedingungen muss der Laufzeitumgebung der Pfad zu Docker Compose und dem Unix-Sleep-Kommando bekannt sein.
Im Buildablauf wird des weiteren ein Docker-Container mit einem Selenium Grid Server initialisiert (nach Start erreichbar unter DOCKER_HOST-Ip:4444/wd/hub/static/resource/hub.html), dessen Chrome Browser die Applikation ansteuert. Eine lokale Browserinstallation ist somit nicht notwendig.
- Exemplarischer End-to-end-Test, der über die Oberfläche überprüft, ob alle Systemteile korrekt zusammenspielen, ohne funktionale Details zu testen.
Erzeugt für die jeweiligen Komponenten anhand eines Dockerfiles und Maven-Plugins ein Docker-Image und legt dies in der lokalen Docker-Registry ab. Docker muss im Rahmen des Builds gestartet sein. Das einmalige Zuschalten des Profils ist Voraussetzung dafür, die Anwendung mit Profil docker-environment bauen und später per Docker Compose (siehe 4.1) starten zu können.
Modifiziert zur Buildzeit Host-Adressen, unter denen die Anwendungskomponenten zur Laufzeit miteinander kommunizieren. Erforderlich zum Zugriff auf mittels docker-image erstellte Docker-Images. Sorgt im Modul testing-tools-image-service dafür, dass für Tests "on-the-fly" eine mongoDB-Instanz gestartet wird.
Ermittelt für eine mittles Docker-Machine bereitgestellte Umgebung zur Buildzeit die Host-Ip des Docker-Hosts. Dieses Profil ist zusätzlich zum Profil docker-environment zu aktivieren.
Sofern die Anwendung mit den Profilen docker-image und docker-environment gebaut wurde, kann Sie mittels eines Docker Compose-Files (im Modul testing-tools-end-to-end) gestartet werden. Der Zugriff erfolgt dann unter der DOCKER_HOST-Ip und dem Port 8843.
Die einzelnen Teilanwendungen können (ohne die Profile docker-image und docker-environment) gebaut werden und dann "normal" unter der Adresse https://localhost:8843 erreicht werden. Voraussetzung hierfür ist, dass auf dem localhost eine mongoDB-Instanz verfügbar ist.
Diese Beispielanwendung ist lizenziert unter einer Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International Lizenz.
© andrena objects ag