GUI und Container Grafische Oberflächen in Container-Umgebungen testen

Autor / Redakteur: Thomas Joos / Stephan Augsten |

Der Vorteil von Containern besteht vor allem darin, dass sie schnell einsatzbereit sind. Damit eignen sie sich als Testumgebung für Graphical User Interfaces ebenso wie für komplette Anwendungen.

Anbieter zum Thema

Container eignen sich bestens, wenn man schnelle, automatisierte Software- und GUI-Tests anstoßen möchte.
Container eignen sich bestens, wenn man schnelle, automatisierte Software- und GUI-Tests anstoßen möchte.
(Bild: pixelcreatures - Pixabay.com / Pixabay )

Vor allem große Anwendungen, bei denen zahlreiche Server und viele Dienste integriert sind, müssen testbar sein. Das ist allerdings nicht immer sehr einfach, weil auch der Aufbau einer Testumgebung schnell sehr kompliziert werden kann.

Durch die Möglichkeit, Container automatisiert bereitzustellen, ist es aber ohne Weiteres möglich, auch Software-Tests zu automatisieren. Vor allem Anwendungen mit grafischer Benutzeroberfläche lassen sich dadurch schnell und einfach testen.

Container als Serverersatz nutzen

Container können für Clients genau die gleichen Funktionen zur Verfügung stellen, die auch vollwertige Server bieten können. Dank Windows Server 2016 und Hyper-V-Containern sowie den Windows Server Containern auf Basis von Docker lassen sich in Sekundenschnelle umfangreiche Umgebungen aufbauen, und zwar vollkommen automatisiert. Die Container können herkömmliche Clients auf Basis von Windows, Linux oder Mac ebenso anbinden wie Web-Clients.

Durch die Definition einer bestimmten Testumgebung und die automatische Erstellung der Container lassen sich schnell und effizient verschiedene Software-Stände reproduzieren und vereinheitlichte Tests durchführen, die immer der gleichen Umgebung entsprechen. Auch in Umgebungen, in denen Microservices eingesetzt werden und Anforderungen wie Continuous Deployment eine Rolle spielen, ist es wichtig, dass schnell einsatzbereite Testumgebungen zur Verfügung stehen.

Container lassen sich problemlos miteinander vernetzen. Dazu wird im Rahmen der Virtualisierung auch auf virtuelle Switches gesetzt. Auf einem Container-Host lassen sich also parallel noch verschiedenste Container betreiben und miteinander verbinden. Wenn es notwendig ist, können die Container mit dem Rest des Netzwerkes kommunizieren, müssen das aber nicht.

Nested Virtualization nutzen

Durch die Auftrennung in verschiedene Umgebungen lassen sich schnell und einfach verschiedene Versionen testen, inklusive unterschiedlicher Infrastrukturen. Wenn notwendig, lassen sich auch komplexe Umgebungen auf einzelnen Hosts bereitstellen. Windows Server 2016 ermöglicht zum Beispiel eine eingebettete Virtualisierung. Das ist auch interessant für das Testen von Containern, auch bezüglich grafischer Oberflächen.

Auf einem Server lassen sich Container-Technologien wie Docker oder rkt problemlos parallel zu Hyper-V betreiben. Als virtueller Server in Hyper-V lassen sich weitere Hyper-V-Hosts betreiben. Auf einem virtuellen Hyper-V-Host können Entwickler außerdem die Container-Technologie parallel zu den Hyper-V-Containern und Hyper-V-VMs nutzen.

Das ermöglicht eine nahezu unbegrenzte Anzahl an Verschachtelungen von VMs, Containern, Hyper-V-Container und verschiedenen Container-Technologien. Da sich in Windows Server 2016 auch problemlos Linux-Server virtualisieren lassen, können auch diese in die Testumgebung eingebunden werden, auf Wunsch sogar inklusive Container-Technologie.

Grafische Oberfläche in Docker testen – X11-Forwarding

Docker bietet die Möglichkeit, ein Display für Container zu simulieren. Mit Skripten kann in Docker-Container auch eine grafische Anwendung laufen. Auch SSH-Server sind möglich. Mittels X11-Forwardung lassen sich so auch Desktop-Programme anzeigen. Um zum Beispiel in einem Container den Browser Firefox zu betreiben, wird ein neuer Container erstellt, zum Beispiel mit:

docker build -t firefox

Um eine Anzeige zu erhalten, wird folgender Befehl verwendet:

docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix firefox

Erscheinen Fehlermeldungen, müssen die Sicherheitseinstellungen des X-Servers angepasst werden, zum Beispiel mit „xhost +local:“ Die Programme laufen im Docker-Container, und zwar durch den X-Server. Auch auf Github stehen einige Container-Images zur Verfügung, die grafische Oberflächen für Docker-Container zur Verfügung stellen können. Auch hier besteht die Möglichkeit, mit Dockerfiles zu arbeiten, um Container automatisiert bereitzustellen.

Dockerfiles für eigene Images erstellen

Auf Basis eines Images lassen sich jederzeit weitere Container erstellen. Das ist ideal für Testumgebungen, vor allem wenn die Konfiguration der Container nicht trivial ist. Der Vorgang lässt sich auch automatisieren, indem ein „Dockerfile“ verwendet wird. Dabei handelt es sich um eine Anweisungsdatei für neue Container.

Der Vorgang kann zum Beispiel über die PowerShell durchgeführt werden:

powershell new-item c:\build\Dockerfile -Force

Die Automatisierung nehmen Entwickler dann über Befehle in der Datei vor. Dazu wird die Datei „Dockerfile“ zum Beispiel in einem Editor geöffnet:

notepad c:\build\Dockerfile

In der Datei lässt sich beispielsweise festlegen, dass ein neues Image erstellt werden soll, welches den IIS als Basis nutzt. Innerhalb der Datei kann man außerdem definieren, dass Änderungen an der Konfiguration vorgenommen werden:

FROM microsoft/iisRUN echo "Dockerfile-Test für automatische Bereitstellung" > c:\inetpub\wwwroot\index.html

Generell kann bei Dockerfiles mit der Anweisung „From“ festgelegt werden, auf welcher Basis der neue Container erstellt werden soll, zum Beispiel mit:

FROM windowsservercore

Mit „Run“ wird festgelegt, was im neuen Containerimage vorgenommen werden soll. Entwickler können zum Beispiel mit dem folgenden Befehl den IIS in einem neuen Containerimage installieren:

RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart

Soll das Visual Studio-Paket in einem Container installiert werden, wird folgender Befehl genutzt:

RUN start-Process c:\vcredist_x86.exe -ArgumentList '/quiet' -Wait

VNC mit Containern nutzen

Generell existiert auch die Möglichkeit, in Containern mit VNC zu arbeiten. In diesem Bereich müssen die Container entsprechend anpasst werden, um VNC-Server bereitzustellen. Damit das funktioniert, ist noch ein Windows-Manager im Container notwendig.

Hierfür stehen verschiedene Werkzeuge wie Xfce zur Verfügung. Sobald der Container entsprechend bereitgestellt ist, erlaubt er externe VNC-Verbindungen, die sich ebenfalls für Software-Tests nutzen lassen. Solche Bereitstellungen lassen sich zum Beispiel mit Dockerfiles erstellen. Entsprechende Dateien sind im Docker Hub verfügbar.

(ID:44678579)