Selenium Grid: Installieren und konfigurieren

Im vorherigen Artikel wurde Selenium in all seinen Ausführungen vorgestellt. Aber nun geht es ans Eingemachte: Hier erfahren Sie, wie Sie eine Selenium Grid Umgebung installieren und konfigurieren.

Selenium Grid Beispiel: Arbeitsumgebung

Arbeitsumgebung: Skriptsprache PHP

Der Testplan wird in unserem Beispiel in der Sprache PHP geschrieben und in der Konsole ausgeführt. PHP hat nicht nur als klassische Skriptsprache für Webapplikationen viele Vorteile, sondern auch als eine eigene Scriptsprache. Es existieren viele Module und Bibliotheken, welche die Möglichkeiten von PHP enorm erweitern können (z.B. PHPWord). Dieses mächtige Werkzeug lassen wir uns auch hier nicht entgehen.

Arbeitsumgebung: Ubuntu als Testclient

Zusätzlich zu dem Multifunktionstool PHP nehmen wir sehr gerne auch noch die Hilfe von Linux-Tools in Anspruch. Diese erweitern sogar das schon ohnehin sehr leistungsstarke PHP um unzählige andere Werkzeuge: Bildbearbeitung, Textbearbeitung, Dokumenterstellung und -konvertierung, usw. Ja, warum das Rad neu erfinden? Wir nutzen einfach alles, was schon lange im Einsatz ist und bewiesen hat, dass es funktioniert und koppeln alle diese Dinge über eine PHP-Bibliothek mit unserem Selenium Grid.

Infografik #1: Mit Hilfe von PHP und Linux-Tools Selenium Grid ansteuern
Infografik #1: Mit Hilfe von PHP und Linux-Tools Selenium Grid ansteuern

Selenium Grid Beispiel: Testcase

Unser Beispiel baut auf einem Linux-Client auf. Dort werden die Testanweisungen vorbereitet und anschließend an den Selenium Hub geschickt (Linux). Dieser wiederum verteilt das Testing an verschiedene Selenium Nodes: Bei uns sind es ein Windows-Rechner und eine Linux-Maschine. Hier nochmal eine schematische Darstellung unserer Architektur als Zusammenfassung.

Infografik #2: Selenium Grid: Schematische Darstellung unseres Testcases
Infografik #2: Selenium Grid: Schematische Darstellung unseres Testcases

Selenium Grid Beispiel: Client

Selenium Client Beispiel: Prerequisites

Unser zukünftiges System setzt einige Sachen voraus. Neben PHP muss auf unserem Client noch CURL und XSL installiert werden:

sudo apt-get install php5
sudo apt-get install php5-xsl
sudo apt-get install php5-curl

Die notwendige Software für den Client ist nun betriebsbereit. Was noch fehlt, ist das PHP Language-Binding, mit dessen Hilfe wir den Selenium-Server ansprechen werden.

Die dazu notwendige Bibliothek ist über git wie folgt installierbar:

git clone https://github.com/facebook/php-webdriver.git
cd php-webdriver
curl -sS https://getcomposer.org/installer | php
php composer.phar install

Diese Bibliotheken beinhalten alle Objekte und Funktionen, die zur Bedienung des Selenium Grid notwendig sind.
Somit ist unser Client vollständig konfiguriert und man kann mit dem Schreiben von Testanweisungen beginnen.

Was uns aber noch zur vollständigen Funktionalität unseres automatisierten Website-Testings fehlt, ist der Selenium Grid Server und die einzelnen Nodes.

Selenium Grid Beispiel: Hub aufsetzen

Ob der Selenium-Hub unter Windows oder Linux läuft, ist unrelevant. Er dient nur als Vermittler zwischen unserem Linux-Client und den Nodes, welche die Testanweisungen ausführen. Unser Selenium Hub hat im Netzwerk den Namen swuser-xubuntu und ist später darüber ansprechbar.

Selenium Grid Beispiel: Hub Prerequisites

Da die Selenium-Software Java-basiert sind, ist es notwendig, auf jeder Maschine, die im Selenium Grid (bestehend aus Hub und Node) aktiv ist, eine Java-Umgebung zu installieren.

Selenium Grid Beispiel: Hub herunterladen und starten

Den Selenium Grid Server kann man unter dieser Adresse herunterladen. Dort wird unter dem Punkt Selenium Server eine .jar-Datei angeboten. Diese kann sowohl als Hub als auch Node fungieren.

Und so startet man schlicht und einfach unseren Selenium Hub:

java -jar selenium-server-standalone-[Version].jar -role hub

Und schon läuft er und wartet ungeduldig auf Testanweisungen vom Client, die er dann weiter verteilt – an Selenium Nodes. Den Status kann man jederzeit in der Console des Selenium-Hubs einsehen.

Die vollständige Adresse hierfür lautet:

http://{IP/Name}:{Port}/grid/console

Wobei

Name Bedeutung
{IP/Name} Der Name/die IP des Rechners ist, auf dem der Selenium Hub Dienst läuft
{Port} Port des Dienstes auf dem Selenium Hub-Rechner. Default ist 4444

So würde die Adresse der Grid Console in unserem Fall wie folgt lauten:

http://swuser-xubuntu:4444/grid/console

Zu diesem Zeitpunkt erkennt man, dass es noch keine Selenium Nodes gibt, die der Hub bedienen kann – ja dann ist es an der Zeit welche zu erstellen.

Infografik #3: Selenium Grid Hub Console
Infografik #3: Selenium Grid Hub Console

Selenium Grid Webdriver Beispiel: Nodes

Selenium Nodes arbeiten unter verschiedenen Betriebssystemen. Wenn man z.B. eine Internet Explorer-Instanz laufen lassen möchte, dann benötigt man logischerweise Windows. Auch bei Safari macht es sehr viel Sinn, diesen unter einem nativen OSX zu bedienen, weil man nur diese Konstellation der Apple-Produkte mit Selenium steuern kann.

Selenium Grid Beispiel: Node Prerequisites

Da auch ein Node unter Java läuft, ist es nötig, auf den entsprechenden Rechnern die passende Java-Umgebung zu installieren.

Selenium Grid Node erstellen: So gehts

Kommen wir nun (endlich) zu unserem ersten Selenium Node. Den Selenium Grid Server (diesmal in der Rolle des Node) kann man, wie oben schon angeführt, unter dieser Adresse herunterladen. Um ihn starten zu können benutzt man eine Eingabe nach folgender Syntax:

java -jar {selenium.jar} \
-role webdriver \
-hub http://{Hub-IP/Adresse}:{Hub-Port}/grid/register \
-browser browserName={Browser-Name},maxInstances={Max},platform={OS} \
-Dwebdriver.{Driver}.driver={Driver-Pfad} \
-port {Driver-Port}

Die nachfolgende Tabelle verdeutlicht die Benutzung der Parameter.

Parameter Bedeutung Beispiel
{selenium.jar} Pfad zur selenium.jar-Datei C:\selenium\selenium-server-standalone-2.44.0.jar
{Hub-IP/Adresse} IP-Adresse oder Netzwerkname des Selenium-Hubs swuser-xubuntu
{Hub-Port} Port des Selenium-Hubs 4444
{Browser-Name} Name des Browsers unter dem dieser Node registriert wird firefox, internetexplorer, chrome, safari, opera, usw.
{Max} Maximale Anzahl der gleichzeitig geöffneten Browser-Sessions 5
{OS} Betriebssystem unter dem dieser Node registriert wird WINDOWS
{Driver} Typ des Browser-Treibers Kann u.a. folgende Werte annehmen: iexplorer, firefox, chrome, opera, safari
{Driver-Pfad} Pfad zur Binären Browser-Driver-Datei C:\selenium\operadriver.exe
{Driver-Port} Der Port, unter dem der Webdriver laufen soll 5556

Jetzt möchten wir auf unserm Windows-Rechner Chrome im Selenium Grid laufen lassen. Selenium braucht also an dieser Stelle einen weiteren Driver, und zwar in diesem Fall den ChromeDriver (hier zu finden). Das Starten eines Selenium Grid Chrome Nodes funktioniert also wie folgt:

java -jar C:/selenium/selenium-server-standalone-2.44.0.jar \
-role webdriver \
-hub http://swuser-xubuntu:4444/grid/register \
-browser browserName=chrome,maxInstances=4,platform=WINDOWS \
-Dwebdriver.chrome.driver=C:/selenium/chromedriver.exe \
-port 5556

Nach dem Starten werfen wir nochmal einen Blick in die Selenium Grid Console. Jetzt erkennt man dort, dass zu unserem Hub unser erster Node hinzugefügt wurde. Es hat funktioniert!

Infografik #4: Selenium Grid Hub Console mit einem Chrome-Node
Infografik #4: Selenium Grid Hub Console mit einem Chrome-Node

Nun kann man das selbe Prinzip anwenden, um andere Browser (unter eventuell anderen Betriebssystemen) im Selenium Grid laufen zu lassen. Jetzt ist unsere System hinreichend konfiguriert, um den ersten Test implementieren können.

Bildnachweis: Titelbild: Analogue sequencer control voltage knobs, Notreshuggie, Flickr, Creative Commons Attribution 2.0 Generic, Infografiken: © schwarzer.de