Kleine Helfer

Automatische Tests für Web-Applikationen

05.02.2009
Von Heiko Spindler
Das Firefox-Plug-in "Selenium" zeichnet Testabläufe auf, die modifiziert und erneut gestartet werden können.

Manuelles Testen von Masken oder Funktionen ist bei Entwicklern nicht sonderlich beliebt. Mit dem richtigen Werkzeug ist es jedoch kein Problem mehr: Selenium ist ein Framework für Blackbox-Tests von Web-Applikationen. Die Firma Thoughtworks entwickelt Selenium und stellt es als freie Software unter der Apache-2.0-Lizenz zur Verfügung.

Die Hauptkomponente von Selenium ist ein Firefox-Plug-in, das Testabläufe aufzeichnet, während man sich durch die Web-Anwendung klickt (capture replay). Es protokolliert alle Benutzeraktionen, also etwa Eingaben in Textfelder oder Klicks auf Buttons, Links oder Auswahllisten. Der Testablauf kann erweitert und erneut gestartet werden. Wie von Zauberhand navigiert der Browser durch die Anwendung.

Manuell ergänzt man diesen Ablauf um die Prüfungen, die den erwarteten Inhalt bestätigen: Meldet sich ein Benutzer auf der Login-Seite an und klickt den "Login"-Button, muss auf der Folgeseite der Text "Login erfolgreich" erscheinen. Geht die Prüfung schief, meldet Selenium den Fehler und bricht den Test ab.

Alternativ erzeugt die IDE direkt den Sourcecode mit Selenium-API-Aufrufen als Java-JUnit-Test. Dieser kann für spezielle Anforderungen erweitert oder in eine Continuous Integration aufgenommen werden. Hierfür bietet das Projekt weitere Softwareteile:

  • Selenium Core: ein API mit den grundlegenden Funktionen des Test-Frameworks;

  • Selenium Remote Control: ein Client-Test-Treiber zum Fernsteuern des Browsers.

Damit eine Applikation gut testbar ist, sollten die HTML-Steuerelemente während der Entwicklung eindeutige ID-Attribute erhalten. So sind diese für den Testfall zweifelsfrei identifizierbar.

Für Lasttests ist Selenium leider weniger gut geeignet. Hier bietet sich das ebenfalls freie "Apache JMeter" an.

CW-Fazit

Web-Entwickler können ihre Testläufe mit Selenium erheblich vereinfachen.