Name

FEST - Fixtures for Easy Software Testing

Homepage

http://code.google.com/p/fest/

Lizenz

Apache License 2.0

Untersuchte Version

Letzter Untersuchungszeitpunkt

29.10.2010

Kurzbeschreibung

FEST (Fixtures for Easy Software Testing) ist ebenfalls wie Abbot, Jemmy oder UISpec4J ein Tool, mit dem grafische Benutzeroberflächen getestet werden können. FEST nutzt als Grundlage TestNG oder JUnit. Es werden die User-Interaktionen auf der Oberfläche simuliert und abgefragt. FEST besteht aus mehreren Modulen, die jeweils separat heruntergeladen und genutzt werden können:

Zum Testen der Oberflächen werden sogenannte Fixtures angelegt, die eine Schnittstelle zu den nativen Java-Swingkomponenten zur Verfügung stellen, um diese entsprechend zu testen.

Fazit

FEST bietet eine sehr gute Möglichkeit, um schnell und effektiv grafische Benutzeroberflächen zu testen. Als Grundlage kann wahlweise JUnit oder TestNG verwendet werden. FEST bietet neben den Swingtests die Möglichkeit, Assert-, Reflect- oder Mocktests durchzuführen. Der Aufbau der Herstellerseite ist sehr gut und übersichtlich. Die dort hinterlegte Dokumentation bietet einen kurzen und guten Überblick über die Funktionalität, ist aber an einigen Stellen sehr kurz geraten. Sind die anfänglichen Probleme mit der Namensfindung beseitigt, lassen sich mit dem Tool grafische Elemente einfach und schnell testen. Besonders gut gelungen sind die Implementierungen der Eingabe-, Ausgabe- und Überprüfungsmethoden, die für fast alle Swingelemente realisiert wurden. Diese lassen sich sehr einfach und intuitiv nutzen, was den Umgang mit FEST erheblich vereinfacht.

Einsatzgebiete

FEST wird hauptsächlich von Testern und Entwicklern zum Testen von grafischen Benutzeroberflächen verwendet. Solche Tools eignen sich besonders gut für oft zu wiederholende Tests, die ein häufiges Klicken auf Buttons, Menüs und andere grafische Elemente erfordern. Der Computer kann diese Tests automatisch abarbeiten und ist wesentlich schneller als ein Mensch, der die Maus oder Tastatur bedient. Mit FEST lassen sich Tests schneller und automatisiert durchführen.

Einsatzumgebungen

FEST wird als Jar-Datei dem eigenen Javaprojekt hinzugefügt und ist somit plattformübergrifend einsetzbar.

Installation

Die Installation ist sehr einfach. Es muss kein Installer ausgeführt werden. Lediglich die heruntergeladene Jar-Datei muss dem eigenen Projekt hinzugefügt werden. Anschließend können die FEST-Klassen für eigene Tests genutzt werden.

Dokumentation

Die Dokumentation von FEST liegt in englischer Sprache vor und befindet sich ausschließlich auf der Herstellerwebseite. Im eingerichteten Wiki auf der Webseite unterteilt sich die Dokumentation in verschiedene Rubriken:

In jeder Rubrik werden kleine Beispiele vorgestellt, die zeigen, wie mit der entsprechenden Funktion von FEST umgegangen werden kann. Die Beispiele werden leider nur sehr kurz beschrieben, bieten aber für einen erfahrenen GUI-Tester einen knappen und guten Überblick. Eine ausführliche Beschreibung fehlt leider auf der Webseite. Zusätzlich wird eine JavaDoc-Dokumentation von FEST angeboten. Die Beschreibungen der Klassen und Methoden sind sehr ausführlich und gut lesbar. Sehr gut gelungen ist der Bereich "Getting Started". Hier wird gut beschrieben, wie FEST installiert und eingerichtet werden muss, um GUI Elemente zu testen.

Wartung der Projektseite

Die Projektwebseite wird in regelmäßigen Abständen aktualisiert und mit neuen Features oder Informationen gefüllt. Bezüglich FEST gibt es zwei wichtige Webseiten, zum einen die Google-Code-Seite, auf welcher der Quellcode gehostet wird, sowie das PMWiki, in dem wichtige Beschreibungen und Tutorials zu finden sind.

Letzte Aktualisierungen:

Auf der Google-Code-Seite existiert eine Rubrik "Links", in welcher sehr informativ auf verschiedene Software-Publikationen verwiesen wird.

Nutzergruppen und Support

Auf der Webseite des Herstellers befindet sich ein Wiki, welches einen sehr guten Einblick in die Software gewährleistet. In verschiedenen Bereichen wird die Software anhand kurzer Beispiele sehr gut erklärt. Zusätzlich wird hier pro Paket die entsprechende JavaDoc publiziert. Auf der Google-Code-Seite des Projektes hat man die Möglichkeit, die Autoren der Software direkt per E-Mail zu kontaktieren. Für das Projekt existiert eine Google Group, der man beitreten kann, um Fragen zu stellen oder beim Projekt mitzuarbeiten.

Intuitive Nutzbarkeit

Die intuitive Nutzbarkeit von FEST ist sehr gut. Mit Hilfe des PMWikis erhält man einen sehr schnellen und guten Einblick in die Funktionalität der Software. Zum Testen werden sogenannte "Fixture Objekte" der jeweiligen Swing-Komponente angelegt. Mit diesen Fixture-Objekten kann die native Funktionalität der Swing-Komponenten getestet werden. Wird das FEST-Assertion Modul genutzt, können die bekannten assert Methoden aus JUnit verwendet werden, um Ergebnisse zu verifizieren. Nutzt man FEST innerhalb von Eclipse oder einer anderen IDE, ist die Codecompletion auch hier eine sehr nützliche Hilfe, da die entsprechenden Testmethoden, welche zur Verfügung stehen, angezeigt werden.

Automatisierung

Die Automatisierung bei FEST erfolgt über die implementierten Testklassen. Diese laufen vollständig automatisiert ab und erwarten keinerlei Interaktion des Testers. Laufen die Tests erfolgreich durch, bekommt der Nutzer lediglich den grünen Balken von JUnit zu sehen. Bricht ein Test mit einem Fehler ab, wird eine entsprechende Exception von FEST generiert und dem Nutzer angezeigt. Die Exceptions sind hilfreich und lassen sich sehr gut lesen. Folgende Darstellung zeigt ein Beispiel, für den Fall, dass eine Komponente nicht gefunden werden konnte:

exception

ANT
Die Automatisierung des FEST-Frameworks mit Hilfe von ANT ist über die JUnit-Tasks Ausführung möglich. Dazu werden JUnit-Testklassen angelegt, die mit Hilfe des FEST-Frameworks die Oberflächen-Tests durchführen. In Ant kann somit einfach auf die JUnit-Tasks zurückgegriffen werden, um die FEST-Tests durchzuführen. Durch die Verwendung der JUnit-Tasks kann auf deren Funktionalitäten zurückgegriffen werden, wie z. B. die Erzeugung von XML-Reports und ähnlichen. Als Beispielautomatisierung wurde das bestehende TestGui-Projekt mit Ant automatisiert. Die Beispielautomatisierung ist hier zu finden.
Maven
Die Automatisierung der Fest Testfälle ähnelt stark der Ausführung von JUnit-Testfällen. Der Fest-Testfall wird in diesem Szenario durch einen JUnit-Testfall angestoßen und ist somit für den Maven-Prozess nicht direkt relevant. Die Sourcen müssen zwar beim Kompilieren und bei der Ausführung auf die Fest-Bibliotheken zugreifen, dies ist allerdings leicht mit Hilfe des <dependency>-Elements realisiert. Davor müssen die Fest-Bibliotheken noch in das lokale Repository von Maven übertragen werden. Die folgenden Befehle erledigen diesen Aspekt:
mvn install:install-file -DgroupId=fest-assert -DartifactId=fest-assert -Dversion=1.3 -Dfile=fest-assert-1.3.jar -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=fest-mocks -DartifactId=fest-mocks -Dversion=1.0 -Dfile=fest-mocks-1.0.jar -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=fest-reflect -DartifactId=fest-reflect -Dversion=1.2 -Dfile=fest-reflect-1.2.jar -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=fest-swing -DartifactId=fest-swing -Dversion=1.2 -Dfile=fest-swing-1.2.jar -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=fest-util -DartifactId=fest-util -Dversion=1.1.4 -Dfile=fest-util-1.1.4.jar -Dpackaging=jar -DgeneratePom=true
Hierbei müssen sich im aktuellen Ordner die Jar-Dateien befinden und die Version ist an die aktuelle Nutzung anzupassen.
Die Ausführung des Tests ähnelt somit stark der Ausführung eines normalen JUnit-Testfalls. Durch den Aufruf mvn test wird der Testfall angestoßen und ausgeführt. Die Ergebnisse lassen sich dann im Target-Verzeichnis finden.
Ein einfaches Automatisierungsbeispiel ist hier zu finden.
Vergleich Ant und Maven
Der Aufwand ist initial bei Maven höher da erst noch die fünf benötigten JAR-Archive in das lokale Repository übertragen werden müssen. Danach ähneln sich der Ablauf von Maven und Ant sehr. Die Testfälle werden jeweils von den JUnit-Testfällen angestoßen und sind somit leicht integrierbar.

Einführendes Beispiel

FEST Eclipse Workspace

Um FEST innerhalb von Eclipse zu verwenden, müssen die entsprechenden Jar-Dateien zum Classpath hinzugefügt werden.

fest_buildpath

Anschließend werden die benötigten Pakete mit Imports der JUnit Klasse hinzugefügt:

einf1

In den Methoden setUp() und tearDown() von JUnit wird ein FrameFixture-Objekt initialisiert. Mit Hilfe dieses Objektes können Swing-Elemente auf dem Fenster lokalisiert und getestet werden.

setup

Jetzt müssen, wie von JUnit gewohnt, Testmethoden implementiert werden, die einen entsprechenden Teil der GUI testen sollen. Mit Hilfe des FrameFixture-Objektes wird auf dem Hauptframe das entsprechende Element (hier ein JButton) mit seinem Namen angesprochen, um anschließend eine Aktion (click) auf diesem Element auszuführen.

tests

In der Methode "checkComboBox()", wie in diesem Beispiel zu sehen ist, wird der Eintrag "Professor" mit Hilfe der Methode "selectItem("Professor")" selektiert und anschließend mit "requireSelection("Professor")" überprüft ob dieser nun auch wirklich in der ComboBox ausgewählt ist.

Das Ergebnis der "requireXXX()"-Methoden wird dann an JUnit weitergereicht und von diesem als TestCase protokolliert.

FEST stellt für alle grundlegenden Java Swingelemente Eingabe-, Ausgabe- und Überprüfungsmethoden zur Verfügung.

Ein wichtiger Hinweis, der unbedingt zu beachten ist:
FEST spricht die Swingelemente über ihre Namen an, die bei der Initialisierung verwendet wurden (hier z.B. "Count", "Reset"). Leider bricht FEST hierbei mit folgender Fehlermeldung ab:

error

Der grüne Balken markiert das Objekt, so wie es in der GUI-Klasse angelegt wurde, mit seinem Namen. Der rote Balken zeigt an, dass FEST dieses Objekt unter dem Namen nicht finden kann und setzt den Wert auf "null". Das Problem lässt sich durch folgende Zeilen in der GUI-Klasse lösen:

namen

Jedes zu testende Swingelement wird mit einem Namen versehen, damit die Werte innerhalb von FEST nicht null sind.
Bekommen die GUI-Elemente mit der Methode "setName" entsprechend einen Namen zugeordnet, so laufen die Tests mit FEST fehlerfrei durch:

result

Detaillierte Beschreibung

Ein erweitertes Beispiel steht hinter diesem Link.

Literatur

keine

Zurück zur Werkzeugübersicht
Zurück zur CSI-Hauptseite