Selenium – Zur Automatisierung von Web-Tests für zuverlässige Webanwendungen

Selenium ist ein Open Source Framework für automatisierte Softwaretests von Webanwendungen. Entwickelt und von der Firma ThoughtWorks unter der Apache-2.0-Lizenz veröffentlicht.

Mit Selenium kann man Interaktionen, in der Regel Testsequenzen, mit einer Webanwendung aufnehmen und diese Tests automatisiert beliebig oft wiederholen. Es nimmt vor allem Entwicklern sehr viel Arbeit ab, da beispielsweise beim Ausfüllen von Webformularen das Testen wesentlich schneller, flexibler und verlässlicher abläuft.

Selenium basiert rein auf HTML und JavaScript. Für einen schnellen Einstieg kann man direkt die Selenium-IDE z. B. als Browser-Add-on installieren und mit dem Testing beginnen. Der Benutzer interagiert ausschließlich mit Firefox, während Selenium die Aufnahme und das Abspielen der Tests übernimmt.

Eine kurze Zeitreise

Im Jahr 2003 fing Jason Huggins, der bereits einige Testing Tools entwickelt hatte, mit der Entwicklung von Selenium an.

Damals war ThoughtWorks weltweit vertreten, aber jeder, der sich außerhalb des Hauptsitzes befand, hatte mit enormen Latenzzeiten zu kämpfen. Allein die Erfassung von Stundenzetteln dauerte eine Ewigkeit. Um diese Einschränkungen zu überwinden, beschloss Jasons Team, JavaScript im Browser zu verwenden, um die Arbeit zu erledigen, anstatt den Server zu verwenden.

Zu dem Zeitpunkt war JavaScript noch nicht zum Standard geworden. Der von Jason geschriebene Code lief zwar in dem Browser Internet Explorer aber nicht auf Mozilla. Die Anpassung des Codes für Mozilla, hätten den Code für Internet Explorer beschädigen können und umgekehrt. Ganz abgesehen von all den zukünftigen Updates für beide Browser gleichzeitig. Dies hätte mehr Schaden als Nutzen verursacht.

Jasons Team brauchte eine zuverlässige Methode, um die Anwendung in den Browsern zu testen. Also recherchierten Jason und zwei weitere Kollegen bei ThoughtWorks ob es irgendwelche Tools gab, die sie verwenden konnten. Wie es meistens so ist, war nichts zu finden, was den eigenen Anforderungen entsprach. So ging es an die Entwicklung von Selenium. Das Tool, welches sie programmiert hatten, konnte Daten eingeben und Schaltflächen auf einer Reihe von Webseiten anklicken, um verschiedene Testszenarien zu durchlaufen dies in mehreren Browsern gleichzeitig.

Im Laufe der Zeit schlossen sich immer mehr Mitarbeiter von ThoughtWorks seiner Arbeit an, bis Paul Hammant dem Team beitrat und die Entwicklung des Programms in die Richtung des heutigen „Selenium Remote Control“ (RC) leitete. Dabei handelt es sich mittlerweile um ein veraltetes Modul.

2007 wechselte Huggins zum Softwarekonzern Google, wo er die Weiterentwicklung und die Fehlerausbesserung des Programms zusammen mit anderen Programmierern vorantrieb. Zur gleichen Zeit entwickelte Simon Stewart bei ThoughtWorks die Browsersteuerung Webdriver (Darüber schreibe ich voraussichtlich auch noch einen Beitrag). Da es für die Entwickler beider Projekte nicht sinnvoll erschien, zwei separate Projekte voranzutreiben, beschlossen sie die beiden Projekte zu „Selenium Webdriver“ bzw. „Selenium 2.0“ zu vereinen.

2008 entwickelte Philippe Hanrigou „Grid“, welches die Ausführung multipler Instanzen ermöglichte. So konnte man das Tool auf einer unbegrenzten Anzahl von Rechnern laufen lassen. Dies führte dazu, dass die Ausführungszeit für große Teststrukturen drastisch verkürzt wurde.

Randnotiz 😀

Der Name Selenium entstand aus einer scherzhaften Bemerkung von Huggins, der in einer E-Mail seine Mitbewerber Mercury damit verspottete, dass eine Quecksilbervergiftung (Mercury poisoning) durch die Einnahme von Selenium geheilt werden kann.

Bestandteile von Selenium

Selenium Core

Das Core-Modul enthält die komplette Basisfunktionalität von Selenium. Die Testbefehl-API und den TestRunner. Unter Verwendung des Core-Modules kann die TestRunner.html-Webseite mit verschiedenen Browsern geöffnet werden. Dadurch werden Kompatibilitätstests mit verschiedenen Browsertypen ermöglicht.

Selenium IDE

Das Selenium IDE ist ein Add-on für Google Chrome und Mozilla Firefox, mit dem man direkt im Browser durch die Interaktion mit einer Webanwendung Testfälle aufnehmen und wieder abspielen kann. Neben der reinen Capture-Replay-Funktionalität lassen sich weitere Überprüfungen mittels „verify“ und „assert“ einbinden. Zudem wird das schrittweise Abspielen von Testfällen, das Setzen von Breakpoints zur Überprüfung der Testfälle und die Wiederverwendung von geteilten Testabläufen unterstützt. Einzelne Testfälle lassen sich zu Testsuites kombinieren und wiederverwenden.

Selenium WebDriver

Selenium WebDriver ist der Nachfolger von Remote Control. Auf Remote Control werde ich nicht weiter eingehen, da dieses Modul veraltet ist. Es akzeptiert Befehle in Selenese oder über die Client-API und leitet diese an den jeweiligen Browser weiter. Eine Besonderheit bildet HtmlUnit. Ab Version 3.0 ist HtmlUnit nicht mehr Bestandteil des WebDrivers. Es handelt sich dabei um einen Webbrowser ohne grafische Anzeige (Headless). Der Selenium WebDriver ist über den Browser Driver implementiert, wodurch die gängigsten Browser unterstützt werden.

Selenium Grid

Selenium Grid ist eine Erweiterung von RC und ermöglicht die parallele Ausführung von Tests auf mehreren Servern, um die Dauer der Testdurchführung zu verkürzen. Der Client-Treiber verbindet sich dabei mit dem Hub anstatt mit dem Server. Der Hub wiederum leitet die Tests auf freie Selenium-Server weiter.

Fazit

Selenium ermöglich, wie mehrfach angesprochen, das direkte Aufzeichnen diverser Test-Szenarien. Bei der Aufzeichnung solcher Testszenarien ist auf jeden Fall Vorsicht geboten, da sich bei einer unkonzentrierten Arbeitsweise Fehler einschleichen können, die einem nachfolgend eventuell nicht auffallen. Die Nutzung von Testsuites kann Sinn machen, da man dadurch eine Gliederung in separate Module erreicht. Die Auswirkungen von Änderungen innerhalb der Applikation können so einfacher auf bestehende Tests übertragen werden, was zu einer besseren Wartung und Wiederverwendbarkeit führt. Sicherlich kann man auch die Arbeit damit wesentlich optimierter und angenehmer realisieren, indem man einiges automatisiert. Aber dazu vielleicht in der Zukunft mehr.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.