Headless Chrome – neue Möglichkeiten für integrierte Oberflächentests

Seit der Chrome Version 2.58 ist es möglich, den Chrome-Browser unter Linux auch headless zu starten. Besonders für automatische Oberflächentests (z.B. mit Selenium) bietet sich dieser headless Modus an.

Für einige Projekte nutzen die Softwareforen Oberflächentests, die von Zeit zu Zeit an einem Entwickler-Rechner durchgeführt werden. Für kleine Projekte mag dies noch recht schnell gehen. In Zeiten von DevOps sowie dem automatisierten Testen und Deployment ergibt das aber wenig Sinn. Umso mehr freute es mich zu hören, dass jetzt auch Chrome das Testen ohne Oberfläche anbietet. Natürlich haben die Softwareforen das gleich ausprobiert und im Folgenden werde ich euch zeigen, welche Schritte notwendig sind, um eine integrierte Testumgebung für Oberflächentest mit Jenkins aufzubauen.

 

Richtige Chrome-Versionen

Zunächst muss sichergestellt werden, dass die richtigen Chrome-Versionen installiert sind. Zum einen benötigt die Host-Maschine einen Chrome-Browser der Version 2.58 oder höher. Zum anderen muss der dazu passende Treiber im Projekt integriert sein. In unserem Fall ist das die Version 2.29. Der Treiber stellt die Verbindung zwischen dem Projekt und dem Host-System her.

Zum Installieren der aktuellen Chrome-Version unter Linux gibt es die folgenden:

 

Xvfb Server für Interaktionen im headless Browser

Für Interaktionen mit Elementen der Oberfläche, wie dem Klicken eines Buttons, wird ein virtueller Framebuffer benötigt. Dies ist ein virtueller Monitor, der die Darstellung graphischer Anwendungen ohne einen Bildschirm ermöglicht. Headless Browser brauchen einen X-Server, da sonst einige Elemente nicht gefunden werden. Xvfb stellt diesen X-Server zur Verfügung. Xvfb steht für X virtual framebuffer und ist ein in-memory Display Server für UNIX-artige Betriebssysteme. Der Server ermöglicht somit die Darstellung ohne ein Display. Außerdem gibt es die Möglichkeit Screenshots zu erstellen, um sich die virtuelle Oberfläche später anschauen zu können.

Die Installation erfolgt über den folgenden Befehl:

Zur Nutzung des virtuellen Framebuffers muss Xvfb zunächst auf einem freien Port gestartet werde und anschließend dem System mitgeteilt werden, auf welchen Port die Bildschirm-Ausgabe erfolgen soll. Zum Starten von Xvfb und dem Umleiten des Display-Ports gibt es die folgenden beiden Befehle:

Jenkins bietet ein integriertes Plugin an, welches den Server auf einem frei gewählten Port vor Ausführen der Tests startet und anschließend auch eigenständig wieder stoppt. Somit sind die beiden letzten Befehle überflüssig.

 

Jenkins Plugins installieren

Nachdem somit die Voraussetzungen für automatische Tests geschaffen wurden, folgt nun die Installation aller wichtigen Tools im Jenkins. Dazu zählt neben dem „Xvfb Plugin“ natürlich auch der „chromedriver„.

Zu finden sind die Plugins im Jenkins auf der linken Seite -> Jenkins verwalten -> Plugins verwalten. Im Karteireiter „Verfügbar“ stehen dann alle Plugins aufgelistet. Dort kann nach den genannten Plugins gesucht werden, um dann beide ohne „ohne Neustart“ zu „Installieren“. Wenn die Installation erfolgreich war, sollten die Plugins einen Karteireiter weiter unter „Installiert“ stehen.

 

Jenkins Konfiguration

Für den Chrome-Driver ist die Sache damit abgeschlossen. Hier ist keine weitere Konfiguration nötig. Lediglich das Xvfb Plugin benötigt noch weitere Einstellungen, die ich in diesem Abschnitt darstellen werde.

Zur Konfiguration muss wieder auf der linken Navigationsleiste auf „Jenkins verwalten“ und dann „Global Tool Configuration“ geklickt werden. Dann erscheint eine Liste an installierten Tools, die modifiziert werden können. Xvfb ist in der alphabetisch sortierten Liste recht weit unten zu finden.

Wichtig bei der Konfiguration ist, dass vorher Xvfb im Jenkins installiert wurde, wie im vorangegangenen Abschnitt über Xvfb-Server dargestellt. Denn jetzt muss der Pfad zu dieser Installationsdatei gesetzt werden. Wenn nicht anders spezifiziert, liegt die Datei im Pfad „/usr/bin“.

 

Zum Schluss wird die Nutzung von Xvfb im entsprechenden Jenkins-Job eingestellt. Dies kann durch einen Klick auf das Projekt und dann in der linken Spalte auf „Konfigurieren“ erreicht werden. Im Abschnitt „Buildumgebung“ gibt es jetzt einen neuen Punkt „Start Xvfb before the build, and shut it down after.“ Bei den erweiterten Einstellungen können dann die Konfiguration für dieses Projekt vorgenommen werden. Wichtig hierbei ist, dass eine passende Installation, in unserem Beispiel „default“, gewählt wird.

 

Jetzt sollte dem integrierten Testen mit einem headless Chrome nichts mehr im Wege stehen. Ich wünsche schon mal viel Spaß beim Ausprobieren!

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.