Selenium Grid – Ein Testnetzwerk

Selenium Grid – Ein Testnetzwerk

photo credit: Tambako the Jaguar via photopin cc
photo credit: Tambako the Jaguar via photopin cc

Wie versprochen der nächste Teil aus der Selenium Reihe.

Bei einem Selenium GRID geht es um eine Architektur, die es erlaubt Seleniumtests zu verteilen. Ein GRID aufzubauen ist recht einfach, da nur eine JAR Datei für verschiedene Zwecke genutzt werden kann. Per Parameter ist es möglich die Applikation so zu starten, so dass sie sich wie ein HUB oder ein NODE verhält. Somit ist es möglich eine ganze Batterie an Testinstanzen in den verschiedensten Kombinationen aufzubauen.

Um ein GRID zu konfigurieren sind ein HUB und verschiedene NODES nötig, die beispielsweise auf virtuellen Maschinen laufen. Auf jeden dieser Rechner sollte eine funktionierende Java Umgebung laufen, um die Selenium Instanzen starten zu können. Für das erste Kennenlernen reicht es aber aus, den HUB und die NODES lokal auf z.B. verschiedenen Terminals zu starten.

Wenn sichergestellt ist, dass Java ordnungsgemäß funktioniert, wird die neueste Version des Selenium Servers benötigt, diese kann von der Selenium Seite heruntergeladen werden.

Mit folgendem Befehl wird ein Service gestartet, dabei wird der Port 4444 standardmäßig belegt, deswegen vorher sicherstellen, dass der Port frei ist. Unter Linux (Unbuntu) kann folgender Befehl Informationen darüber liefern, ob der Standardport gerade genutzt wird.

netstat -lp | grep ":4444"

Ist der Port soweit offen kann als erstes der HUB gestartet werden. Das ist die Applikation, die die Testanfragen weiter vermittelt.

java -jar selenium-server-standalone-version.jar -role hub

Wurde der HUB erfolgrei gestartet wird folgende oder eine ähnliche Meldung auf der Konsole ausgegeben. In der letzten Zeile erkennt man unter welchem Port der HUB gestartet wurde.

20:52:13.944 INFO - Launching a selenium grid server
2014-11-13 20:52:14.587:INFO:osjs.Server:jetty-7.x.y-SNAPSHOT
2014-11-13 20:52:14.617:INFO:osjsh.ContextHandler:started o.s.j.s.ServletContextHandler{/,null}
2014-11-13 20:52:14.623:INFO:osjs.AbstractConnector:Started SocketConnector@0.0.0.0:4444

Wurde der Service standardmäßig gestartet, kann per http://localhost:4444/ die Startseite aufgerufen werden, die dem Anwender die erfolgreiche Konfiguration der Applikation bestätigt.

Arbeitet der HUB ordnungsgemäß, können sich NODES an diesen HUB anmelden. Es ist möglich die NODES parametrisiert zu starten,  so dass beliebige Kombinationen von Betriebssystemen und Browsern für Tests zur Verfügung gestellt werden können.

Mit nachfolgendem Befehl wird ein NODE an einem spezifizierten HUB angemeldet. Zusätlich wird dem HUB mitgeteilt, dass der NODE nur Aufträge entgegennehmen kann, die einen FireFox benötigen.

java -jar selenium-server-standalone-2.44.0.jar -role node -hub http://localhost:4444/grid/register -browser browserName=firefox

Mit folgendem Link kann anschließend überprüft werden, welche NODES mit welchen Eigenschaften, sich an dem HUB angemeldet haben und welche Fähigkeiten zur Ausführung von Tests sie besitzen. Zwar ist es auch möglich die Logs des HUBs zu analysieren, um zu sehen welche NODEs gerade angemeldet sind, die Möglichkeite über den Browser ist aber für den Anfang etwas bequemer.

http://localhost:4444/grid/console

Beim Start einer Selenium Instanz wird intern ein Jetty Server gestartet, welches sich um die Zurverfügungstellung des Services kümmert und bei Selenium standalone ohne zusäztliche Konfiguration funktioniert.

Wenn Tests geschrieben werden, ist es notwendig bei der Konfiguration die Zieladresse des HUBs anzugeben. In unserem Fall kann folgende Adresse angegeben werden, damit die Tests ausgeführt werden.

http://localhost:4444/wd/hub
Überblick zwischen Test HUB und NODES
Überblick zwischen Test HUB und NODES

 

Der Server bietet einen Service an, der per JSON angesprochen werden kann. Dieser Service nimmt Selenese – die Selenium Sprache – entgegen, bewertet die übermittelten Kommandos und leitet die Anfragen an installierte WebDriver weiter. Der FireFox Driver funktioniert out of the box,  vorausgestzt dieser Browser ist auf der Testmaschine installiert. Für andere Browser müssen zusätzlich Driver heruntergeladen und so vorbereitet werden, dass sie per Konsole aufrufbar sind. Wie bereits angedeutet, können zur Zeit folgende Browser mit Hilfe ihrer WebDriver angesprochen werden.

Weiter Driver werden auf der Selenium Download Seite aufgelistet und können über diese heruntergeladen werden.

Sobald die Anforderungen an Tests komplexer werden und beschlossen wird, auf vielen verschiedenen Plattformen in vielen möglichen Kombinationen von Browsern und Browserversionen zu testen, lohnt es sich über den Tellerrand zu schauen. Es gibt zwei bekannte Anbieter, BrowserStack und SauceLabs, die die Infrastruktur bereitstellen, um eine große Anzahl von Kombinationen abzudecken. Bei den ABO Modellen erhält man eine HUB URL, auf die man seine Tests ausführen lassen kann. Die Konfiguration der Zielplattformen kann in den Unit Tests selbst vorgenommen werden, um den Rest kümmern sich die GRID Anbieter.

Wie Ihr sehen könnt, ist die Konfiguration eines Solchen GRIDs mit ein wenig Fingespitzengefühl einfach zu konfigurieren und aufzubauen. Es würde mich sehr freuen Feedback von euch zu erhalten, falls Ihr auch gerade ein GRID aufbaut oder welche Erfahrungen Du mit Selenium gemacht hast.

Wenn Du diesen Beitrag interessant findest melde Dich doch im Newsletter an oder teile den Link zu dieser Seite weiter.

Vielen Dank fürs Durchlesen und viele Grüße,

Andrés

 

1 Comment

  • Hi,
    finde deine Webseite sehr interessant. Endlich mal jemand der Selenium umfassend und mit Beispielen erklärt. Genau das habe ich gesucht!
    Danke 🙂


Schreibe einen Kommentar

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