Mehr Zeit für die wichtigen Dinge: Automatisiertes Testen mit Maven und Selenium.

20.03.2014

html_blogAls Entwickler von Webanwendungen kämpfen wir häufig mit folgendem Szenario:
Endlich eine Änderung im Code umgesetzt, Deploy-vorgang war erfolgreich. Jetzt sicherheitshalber die Webseite „durchklicken“ um nach etwaigen Fehlern zu suchen – nichts gefunden. Nach einiger Zeit meldet sich unerwartet ein Kollege, oder schlimmer ein Kunde, und weist auf einen Fehler hin, den man übersehen hat. Eine unschöne Situation, die dadurch entsteht, dass manuelles Testen auf Fehler entweder sehr langwierig und/oder sehr ungenau ist.

Wäre es da nicht praktisch, wenn es eine Möglichkeit gäbe, von vorne hinein programmierte Testfälle vollkommen automatisch mit dem Build-/ oder Deploymentprozess ausführen zu lassen? Genau mit diesem Thema beschäftigt sich der folgende Artikel. Es wird gezeigt, wie durch die Verbindung zweier Technologien, Maven und Selenium, eine erhebliche Arbeitserleichterung für den Entwickler ensteht.

Was ist Maven und Selenium?

Maven ist ein Build-Management-Tool der Apache-Software-Foundation und basiert auf Java. Mit ihm kann man, insbesondere in Java, Programme standardisiert erstellen und verwalten.“ [1]

Selenium ist eine Testumgebung für Webanwendungen, die [ … ] unter der Apache-2.0-Lizenz veröffentlicht wurde. Es ist ein weit verbreitetes Tool für automatisierte Tests von Webanwendungen und zählt zu den bekanntesten quelloffenen Testwerkzeugen.“ [2]

Konkreter Anwendungsbereich

Bevor der Mehrwert solcher Technologien deutlich wird, muss erst einmal klar sein, in welchem Umfeld sie sinnvoll eingesetzt werden können. Das Augenmerk liegt hier bei der Frontend- und speziell der GUI-Entwicklung in mittleren bis großen Softwareprojekten. In solchen Projekten ist es üblich, dass der Deployvorgang automatisiert wird. Trotz dieser Vorgehensweise tritt oft der Fall ein, dass nach einem Upload die GUI händisch auf Fehler getestet wird, wobei der Fokus hier auf der technischen Darstellung und nicht auf der Benutzerfreundlichkeit liegt. Diese Lücke gilt es zu schließen.

Den Vorteilen automatisierten Testens, wie Zeitersparnis oder hohe Fallabdeckung, wird durch Maven noch die Automatisierung hinzugefügt. Konkret geht es um die Einbindung der Testsfälle in den Buildprozess. Dabei werden die Tests vollautomatisch ausgeführt und ihre Ergebnisse in verschiedenen Dateiformaten (.txt und .xml), in einem vorbestimmten Ordner gespeichert. Die Arbeitsabläufe bei einem Deployment werden dadurch schneller und fehlerfreier, oder kurz: Effizienter.

Nach einer erfolgreichen Integration werden die Tests bei jedem Deployvorgang ausgeführt. Dieses Verhalten ist nicht immer gewollt. Das Starten der Tests, aber auch andere Parameter, etwa die Login Daten, sollten flexibel sein. Daher werden die Werte in eine zentrale .properties-Datei geschrieben, aus der die benötigten Parameter ausgelesen werden.

Gesetzte Parameter in der .properties Datei:

autom-testen-1

Das Auslesen der Werte ist einerseits in den Testfällen und andererseits in der pom.xml des Maven Projekts nötig.

Auslesen des Parameters in JUnit:

autom-testen-2

Auslesen des Parameters in der pom.xml:

autom-testen-3

 

Mit diesen Anpassungen, die beliebig erweiterbar sind, lässt sich der Buildprozess einfach und hochdynamisch durchführen.

Die beschriebenen Vor- und Nachteile kurz zusammengefasst:

Vorteile Nachteile
Hohes Maß an Dynamik Testfälle lassen sich nur mit hohem Aufwand einzeln abspielen
Zeitersparnis Tests laufen mit Selenium IDE deutlich schneller, als in Verbindung mit Maven
Einfache Einbindung von Testfällen in Maven  
Multi-Browser Unterstützung der Testfälle  
Sowohl Selenium, als auch Maven sind Freeware  
Hohe Zuverlässigkeit  
Bei Fehlschlag: Detailliertes Fehlerprotokoll  

 

Die Zukunft automatisierter Tests

Schon heute kann mit bestehenden Technologien viel erreicht werden. In Zukunft lässt sich dies noch ausbauen. Einige Entwicklungsmöglichkeiten und -richtungen sind nachfolgend beschrieben.
Oft gewünscht und damit sehr wahrscheinlich, ist die Möglichkeit, mehrere Testfälle parallel ablaufen zu lassen, was einen enormen Zeitgewinn bedeuten würde.
Außerdem soll der Zeitpunkt der Ausführung im Buildprozess flexibler werden. Bisher gibt es in Maven nur zwei Stellen, an denen das möglich ist: Die Standardtestphase und die Integrationtestphase. In der Standarttestphase des Maven-Lifecycles wird der Quellcode kompiliert, der erhaltene Code mit den Testfällen gegengetestet und erst im Anschluss deployed. Dieses Verhalten ist für GUI-Tests nur bedingt geeignet, da die Änderungen erst im Anschluss an den Upload gültig werden. Die Integrationtestphase verspricht hier zwar Abhilfe, in dem sie die Testfälle nachträglich durchläuft, die Implementierung des dazu notwendigen Plugins ist aber komplexer. Hier wäre eine freie Auswahl des Ausführungszeitpunkts der Testphase hilfreich. Dazu ist eine flexiblere konfiguration des Maven-Lyfecycles notwendig.

Darüber hinaus werden alle Java Testdateien bei Maven standardmäßig in den vorgegebenen Ordner (src/test/java) gepackt, was zu einer großen Unübersichtlichkeit bzw. Unordnung führen kann. Eine bessere Abgrenzung und Ordnerstruktur wäre eine willkommene Weiterentwicklung [3].

Einen Schritt weiter würde es gehen, wenn die Testfälle nicht bei jedem Upload, sondern automatisch und periodisch, serverseitig durchführbar wären. Der Entwickler wird hier nur bei einem Fehlschlagen der Tests benachrichtigt. An dieser Stelle ist die Integration und das automatisierte Ausführen der Testfälle im Rahmen von Continous Integration, beispielsweise mit Jenkins denkbar [4].

Bereits vorstellbar ist die Einbindung von „Nicht-Entwicklern“ ohne Programmierkenntnisse in die Erstellungsphase für Testfälle. Diese können mit Hilfe von Selenium IDE-Testfälle einfach „zusammenklicken“, welche später von einem Programmierer in die gewünschte Programmiersprache übertragen werden.

Zusammengefasst lässt sich sagen, dass der Einsatz der beiden Tools in Kombination erst einmal gut überdacht werden sollte. Bei gewissenhafter Planug und Implementierung stellen sie jedoch eine große Arbeitserleichterung für den Entwickler dar und tragen entscheidend dazu bei, den hohen Qualitätsansprüchen an ein Produkt gerecht zu werden.


[3] Integration Testing: http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing

[4] Einen guten Überblick über Testautomatisierung mit Jenkins und SOAP-UI bietet folgender Blogbeitrag https://blog.doubleslash.de/continuous-testing-testautomatisierung-mit-soapui-und-jenkins/

Zurück zur Übersicht

Kommentar verfassen

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

*Pflichtfelder

*