Automatisiertes Testen: So funktioniert Selenium Grid

Warum man automatisiert testen sollte, wird in diesem Artikel beschrieben. Um dynamische Webapplikationen automatisiert testen zu können, kann man sich einer Reihe von Tools bedienen. Ein sehr mächtiges Werkzeug trägt den Namen „Selenium„. Die Hersteller von Selenium beschreiben das Produkt auf ihrer Website kurz und treffend wie folgt: Selenium automates browsers. Selenium würde hier also die Aufgaben eines Mitarbeiters übernehmen, der in einem Browser die Website per Hand testet. Die kostenfreie Software kann nicht nur einfache User-Aktionen, wie z.B. Mausklicks, simulieren, sondern auch komplizierte Benutzereingaben, wie das Einloggen ins Backend und das anschließende Erstellen eines Datensatzes.

Aufgepasst: Verschiedene Arten von Selenium

Wenn man nach Selenium recherchiert, rauschen an einem folgende Begriffe vorbei:

Selenium 1, Selenium IDE, Selenium Remote Control, Selenium Grid, Selenium 2, Selenium Webdriver, Selenium RC

Die Namen sind Synonyme und hängen wie folgt zusammen:

Gebräuchlicher Begriff Synonym Warum Synonym
Selenium Remote Control Selenium 1 Die erste Version von Selenium, deswegen 1
Selenium RC RC ist die Abkürzung für Remote Control
Selenium Grid Selenium 2 Die zweite, überarbeitete Version von Selenium, deswegen 2
Selenium Webdriver Webdriver beschreibt die Funktionsweise hinter Selenium Grid, nämlich: Über eine Web-Schnittstelle
Selenium IDE (keine)

Hier den drei Arten (Remote Control, Grid, IDE) handelt es sich also um verschiedene Ausführungen/Typen von Selenium. Somit entstehen Fragen, die im Laufe dieses Artikels beantwortet werden:

  • Was ist der Unterschied zwischen Selenium Grid, Webdriver und Selenium Remote Control (RC)?
  • Warum gibt es diese verschiedene Versionen von Selenium?

Schauen wir uns deshalb die verschiedenen Versionen von Selenium etwas genauer an.

Selenium IDE

Selenium IDE ist ein Firefox-Plugin, welches Benutzeraktionen aufzeichnet und wieder abspielt. Alle möglichen und scheinbar unmöglichen Actions lassen sich damit aufnehmen, bearbeiten, abspeichern und später wiedergeben. Selenium IDE kann man mit der Makro-Funktion in Excel vergleichen. Es ist sozusagen eine Makro-Funktion für Webseiten. Die aufgenommenen Befehle werden zunächst in einem eigenen Format aufgezeichnet und können dann direkt im Selenium IDE-Fenster bearbeitet und abgespielt werden.

Infografik #1: Screenshot Selenium IDE
Infografik #1: Screenshot Selenium IDE

Leider unterstützt diese abgespeckte Version von Selenium keine Schleifen, Bedingungen oder eigene Funktionen und versieht ihren Dienst tatsächlich nur im Firefox-Browser. Aber einen gewaltigen Vorteil hat die Selenium IDE doch: Man kann die dort aufgezeichneten Makros in verschiedene Programmiersprachen exportieren. Diese Exportfunktion lässt sich mit zusätzlichen Plugins um zusätzliche Sprachen (z.B. PHP) erweitern. Beim Exportieren kann man auch auswählen, ob der Code mit Selenium RC oder mit Selenium Webdriver (=Selenium Grid) kompatibel sein soll.

Infografik #2: Selenium IDE: Exportieren für Webdriver/Grid oder Remote Control
Infografik #2: Selenium IDE: Exportieren für Webdriver/Grid oder Remote Control
Infografik #3: Architektur und Funktionsweise von Selenium IDE
Infografik #3: Architektur und Funktionsweise von Selenium IDE

Selenium Remote Control (kurz: RC)

Das Selenium Remote Control (kurz auch Selenium RC genannt) ist ein sehr mächtiges Tool. Man kann dort in einer Programmiersprache Testanweisungen wie

  • rufe die Seite x auf
  • klicke in das Eingabefeld y
  • warte auf die Ausführung von AJAX
  • mache einen Screenshot
  • prüfe, ob das Feld z den wert „abc“ hat
  • usw.

definieren und somit sozusagen mit dem Browser (Firefox, Chrome, IE, Opera, Safari, …) interagieren. Die Befehle werden an den Selenium-Server selenium.jar gesendet, welcher einen Browser öffnet und dort JavaScript injiziert. Man steuert den Browser hier also im Endeffekt mit reinem JavaScript.

Remote Control funktioniert wunderbar, bietet aber leider keine vollständige, objektorientierte Schnittstelle und hat diverse Unstimmigkeiten bei Funktionsaufrufen. Zudem ist es mittlerweile veraltet und existiert nur noch aufgrund der Abwärtskompatibilität. Denn die neue Version Selenium Grid oder Selenium Webdriver hat einige Verbesserungen zu bieten, die das Testing um einiges flexibler und sicherer machen.

Infografik #4: Architektur und Funktionsweise von Selenium Remote Control (RC)
Infografik #4: Architektur und Funktionsweise von Selenium Remote Control (RC)

Selenium Grid über Webdriver

Im eigenen Code werden die Testanweisung verfasst und über eine API-Schnittstelle an den Selenium-Server geschickt. Wie der Name (Webdriver) schon sagt, basiert diese API von Selenium Grid auf einer Web-Schnittstelle. Deswegen gibt es bei Selenium Grid auch mehr Programmiersprachen, sogenannte „Language Bindings“, die automatisierte Selenium Tests bedienen können. Die gewählte Sprache muss einfach mit dem Webservice von Selenium kommunizieren können, mehr nicht.

Der Selenium-Server nimmt die Befehle entgegen und gibt diese an den entsprechenden Browser-Driver weiter. Es gibt für jeden Browser einen eigenen Browser-Driver. Dieser startet den Browser und steuert seine Engine direkt, nicht über JavaScript. Daraus ergeben sich Performace-Vorteile und ein erweiterter Funktionsumfang, weil der Browser-Driver eben direkt und nativ (nicht über JavaScript) mit seinem Browser spricht.

Jetzt hat Selenium Grid aber auch den Vorteil, dass man seine Tests auf mehreren Rechnern gleichzeitig ausführen kann. Das bringt nicht nur Übersichtlichkeit, sondern auch einen schnelleren und intensiveren Testablauf. So kann man ohne großen Aufwand mehrere Betriebssysteme mit unterschiedlichsten Browsern kombinieren und mit Leichtigkeit z.B. Screenshots einer Website erstellen.

Infografik #5: Architektur und Funktionsweise von Selenium Grid über Webdriver
Infografik #5: Architektur und Funktionsweise von Selenium Grid über Webdriver

Testplan notwendig

Bei Selenium gibt es einen einzigen Testplan für mehrere Umgebungen, unter denen die Website auf Herz und Nieren geprüft wird. Das freut nicht nur Praktikanten sondern auch die Qualitätssicherung. Diese können nun die durch automatisierte Softwaretests gewonnene Zeit damit verbringen, weitere Testfälle zu definieren, statt stundenlang monotone Testpläne abzuarbeiten. Dadurch steigt nicht nur die Zufriedenheit der Mitarbeiter im Team sondern auch die Qualität der Website.

Wählen der Sprache

Da, wie schon erwähnt, Selenium Grid über mehrere Sprach-Bindings verfügt, kann man seine Programmiersprache beliebig auswählen.

Selenium Grid Architektur

Um die Funktionsweisen von Selenium Grid besser verstehen zu können, nehmen wir ein Beispiel. Auf meinem Rechner läuft Linux mit den Selenium PHP-Bindings. Ich schreibe also munter meine Testanweisungen in meiner Lieblinssprache – PHP – und freue mich meines fast schon fertigen Testplans. Mein Code schickt über die Web-Driver-Schnittstelle Befehle an einen Selenium Hub. Das ist sozusagen der Verteiler der Testpläne. Der Hub nimmt die Testing-Anweisungen entgegen und verteilt diese an seine ausführenden Nodes. Das sind die Rechner, auf denen auch ein Selenium-Dienst läuft, aber als Node, nicht als Hub. Der oder die passenden Nodes nehmen die Befehle entgegen und reichen diese an den entsprechenden Browser-Driver weiter. Dieser kümmert sich entspannt um den Rest: Öffnet den Browser und kommandiert ihn herum. Klick bitte hier, tippe da, usw. Die Abbildung verdeutlicht die Zusammenhänge.

Infografik #6: Architektur von Selenium Grid mit einem Hub und mehreren Nodes
Infografik #6: Architektur von Selenium Grid mit einem Hub und mehreren Nodes

Selenium: Verständnis der Architektur wichtig

Warum steht hier aber so viel Text und irgendwelche schematischen Grafiken und gar keine einzige Zeile Code? Das Verständnis der Architektur von Selenium Grid, vom Selenium Webdriver und die Unterschiede zur Selenium IDE und Selenium Remote Control ist essentiell – vor allem, wenn es um das Debugging geht. Und wenn man nach Codeschnipseln im Internet sucht, die Selenium bedienen sollen, sollte man immer im Hinterkopf haben, mit welchem Selenium man es denn genau zu tun hat.

Bildnachweis: © schwarzer.de, Titelbild: George A. Bockler, via Wikimedia Commons