Die Software Abbot dient zum Testen von grafischen Benutzeroberflächen. Beim Testen von sogenannten GUIs (Graphical User Inferfaces) bietet Abbot
die Möglichkeit, Testskripte mittels Costello aufzunehmen und diese zu einem späteren Zeitpunkt erneut abzuspielen. Testskripte können
dann um die Prüfung von Eigenschaften erweitert werden. Dabei werden bei der Ausführung des Skripts bestimmte Werte oder
Ereignisse miteinander verglichen und ein Testergebnis generiert. Der große Vorteil von solchen Testwerkzeugen ist, dass sie zum
größten Teil automatisch ablaufen. Der Tester zeichnet dazu eine bestimmte Vorgehensweise auf der Oberfläche auf. Es werden Klicks
und Mausbewegungen gespeichert. Wird solch ein Skript später erneut abgespielt, interpretiert der Computer dieses Skript und führt
die Mausbewegungen und Klicks eigenständig durch. Speziell bei Abbot hat der Nutzer die Möglichkeit, die Software als Standalone-Anwendung
(Costello) über Java Web Start zu nutzen, um eigene Testskripts zu schreiben oder diese abzuspielen. Die aufgenommenen Testskripte
werden in XML beschrieben. Des Weiteren besteht die Möglichkeit, Abbot als Jar-Datei dem eigenen Projekt hinzuzufügen und damit ohne
Skriptrekorder eigene GUI-Testklassen von Hand zu implementieren.
Abbot bzw. Costello können auf folgende GUI Ereignisse reagieren:
Abbot bzw. Costello bieten eine sehr gute Möglichkeit, GUI-Dialoge und Elemente schnell und einfach zu testen. Dies kann entweder über den Skriptrekorder von Costello geschehen oder direkt aus Eclipse heraus mit JUnit 4.8.2 als Grundlage. Costello, als Standalone-Anwendung, ist am Anfang eher unübersichtlich und schwerfällig zu betreiben und zu konfigurieren. Wird Abbot innerhalb von Eclipse verwendet, erhält man einen sehr schnellen und guten Einblick in die Umsetzung und Funktionalität des Tools. Das Erstellen der Testklassen innerhalb von Eclipse dauert etwas länger als das Aufnehmen eines Testskripts, jedoch versteht man die Technik, die dahinter steht deutlich besser. Hat man die Vorgehensweise einmal verstanden, können schnell Testergebnisse erzielt werden. Leider konnten einige Klassen von Swing nicht richtig getestet werden, da auf diese Elemente nicht zugegriffen werden konnte. In diesem Beispiel war dies die Klasse JOptionPane, welche für die Darstellung und Eingabe eines Textes innerhalb eines Dialogfensters zuständig ist. Die Dokumentation und Tutorials zum Tool sind sehr gut. Alle Informationen befinden sich auf der Herstellerwebseite und liegen in Englisch vor. Die Webseite ist sehr gut strukturiert.
Abbot 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 nach einem Skript abarbeiten und ist wesentlicher schneller als ein Mensch, der die Maus oder Tastatur bedient. Mit Abbot lassen sich Tests schneller und automatisiert durchführen.
Abbot kann auf verschiedenen Wegen genutzt werden:
Die Installation von Abbot bzw. Costello ist sehr einfach. Es muss lediglich die Software von der
Sourceforge-Projektseite
heruntergeladen und auf der Festplatte entpackt werden. Danach kann die Costello.jar Datei im Verzeichnis
/abbot/lib/ gestartet werden.
(Hinweis: Zum Testzeitpunkt fehlte die Datei "Costello.jar" in der .tgz-Version, war jedoch in der .zip-Datei vorhanden!)
Der Befehl zum Starten lautet java -jar Costello.jar
.
Nach erfolgreicher Installation und Starten von Costello erscheint folgendes Fenster:
Wenn Abbot innerhalb von Eclipse verwendet werden soll, importiert man lediglich die mitgelieferten abbot und junit Jar-Dateien aus dem Ordner lib in das entsprechende Projekt. Je nach Projekt müssen ggf. noch die gnu-regexp, groovy-all und/oder jdom Jar-Dateien importiert werden. Zum Testen der GUI-Dialoge, müssen folgende Pakete in die Testklasse importiert werden:
junit.extensions.abbot.*;
abbot.tester.*;
Die Testklasse erbt von der Klasse ComponentTestFixture. Zum Testen der eigenen Elemente ist ein Objekt vom Typ ComponentTester nötig. Mit Hilfe dieses Objektes können dann z.B. click-, mouse- und drag-Aktionen registriert und getestet werden. Die genaue Vorgehensweise wird im Kapitel "Einführendes Beispiel" im Abschnitt 2 erläutert.
Die Dokumentation zur Software befindet sich auf der Herstellerwebseite und im Download-Archiv. Sie ist sehr ausführlich und vielseitig. Alle Dokumentationen liegen in englischer Sprache vor und unterteilen sich in verschiedene Bereiche. Zum Einen der Bereich der Javadoc-API, in welchem die technische Dokumentation von Abbot in Form von JavaDoc präsentiert wird. Alle Klassen, Methoden und Eigenschaften sind sehr gut beschrieben. Der Bereich "Quick Start" zeigt, wie man die Standalone-Version von Abbot (Costello) Schritt für Schritt einrichten und nutzen kann, um eigene Skripts zum Aufnehmen von Tests zu nutzen. Zu diesem Bereich gehört ein User-Guide, in welchem die einzelnen Funktionalitäten von Costello noch einmal ausführlicher beschrieben werden. Für einen schnellen Überblick zur Funktionalität von Abbot bietet der Bereich "Examples" zwei kurze Beispiele, die zeigen sollen, wie mittels Abbot GUI-Elemente getestet werden können. Ein sehr wichtiger und nützlicher Teil der Dokumentation ist der Bereich "Tutorials". Hier werden erneut Beispiele Schritt für Schritt erklärt. Im Bereich Help wird auf die FAQ verlinkt. Es besteht die Möglichkeit, sich mit den Entwicklern per EMail oder Mailinglist in Verbindung zu setzen. Ein weiterer sehr wichtiger Bestandteil der Dokumentation ist der FAQ-Bereich, hier werden einige sehr wichtige Fragen beantwortet die während der Nutzung von Abbot aufkommen.
Die Projektwebseite wird mit jedem neuen Release von Abbot aktualisiert. Die letzte Änderung der Projektseite war am 20.12.2011. Weiterhin ist aufgefallen, dass die Projektseite schlecht gepflegt wird. So führt der Link zum Wiki ins Leere, ebenso der Link Test Results. Unter Test Coverage finden sich Auswertungen von Oktober 2005.
Die Bereiche "FAQ" und "Tutorial" bieten sehr viele nützliche Informationen zu Abbot und Costello. Es werden häufige Fehler und Lösungen, sowie detaillierte Beschreibungen zur Vorgehensweise bei der Installation und Anwendung der Software besprochen. Über Mailinglisten oder das eingerichtete Forum hat man die Möglichkeit, sich mit den Entwicklern in Verbindung zu setzen.
Bei der Nutzbarkeit von Abbot unterscheidet man zwei verschiedene Bereiche: die Nutzbarkeit von Costello als Standalone-Anwendung und Abbot als Jar-Datei, welche in Eclipse genutzt werden kann. Bei der Nutzung von Costello sollte man vorher auf jeden Fall die Tutorials auf der Webseite lesen, da Costello auf den ersten Blick etwas unübersichtlich ist. Hat man Costello eingerichtet, sollte die zu testende Software erkannt werden und man kann mit der Aufnahme der Skripte beginnen. Die Nutzbarkeit von Abbot innerhalb von Eclipse ist sehr gut. Das Beispiel auf der Webseite bietet einen sehr guten und kurzen Überblick. Da Abbot auf JUnit 4.8.2 basiert, müssen die Testmethoden mit test beginnen. Zum Testen der grafischen Oberfläche können verschiedene ComponentTester-Objekte erzeugt werden. Mit diesen Objekten können die einzelnen GUI-Elemente mit verschiedenen Klick-Methoden geprüft werden. Um zu verifizieren, ob die Änderungen an der GUI auch tatsächlich vollzogen wurden, kann hier mittels assert Methoden auf Gleichheit, richtig oder falsch getestet werden.
Die Automatisierung bei Abbot bzw. Costello erfolgt entweder über die aufgenommenen Testskripte oder die selbst implementierten Testklassen. Beide Varianten laufen automatisiert ab und erwarten keinerlei Eingaben oder Aktionen des Testers. Nach erfolgreichem Testlauf wird ein Endergebnis auf der Konsole ausgegeben. Tritt während des Tests ein Fehler auf, bricht der Test ab und die entsprechende Fehlermeldung weist den Tester auf das entstandene Problem hin.
<dependency>
-Elements realisiert. Davor muss die Abbot-Bibliothek noch in das lokale Repository von Maven übernommen werden. Der folgende Befehl erledigt diesen Aspekt:mvn install:install-file -DgroupId=abbot -DartifactId=abbot -Dversion=1.1 -Dfile=abbot.jar -Dpackaging=jar -DgeneratePom=true
mvn test
wird der Testfall angestoßen und ausgeführt. Die Ergebnisse lassen sich dann im Target
-Verzeichnis finden.
"Can't convert the String "String[] args" into an instance of [Ljava.lang.String;"
1.1 Aufzeichnen der GUI-Events:
Nun wird im Menü "Aufnahme" --> "Alle Aktionen (keine Mausbewegungen)" gewählt. Beim Mitschneiden aller Mausbewegungen werden sehr viele Maus-Events gefangen und das Skript wird schnell unübersichtlich - deswegen hier ohne Mausbewegungen.
<?xml version="1.0" encoding="UTF-8"?>
<AWTTestScript>
<component class="javax.swing.JButton" id="Count" index="0" parent="MyMainPanel Instance" text="Count" window="TestGUI - QSQS FH 2008" />
<component class="javax.swing.JMenu" id="Datei" index="0" parent="MyMenuBar Instance" text="Datei" window="TestGUI - QSQS FH 2008" />
<component class="javax.swing.JDialog" id="Eingabe" parent="shared frame" title="Eingabe" />
<component class="javax.swing.JDialog" id="Eingabe 2" parent="shared frame" title="Eingabe" />
<component class="javax.swing.JMenu" id="Einstellungen" index="1" parent="MyMenuBar Instance" text="Einstellungen" window="TestGUI - QSQS FH 2008" />
<component class="javax.swing.JCheckBoxMenuItem" id="Hide Label" index="2" parent="JPopupMenu Instance 2" text="Hide Label" window="TestGUI - QSQS FH 2008" />
<component class="javax.swing.JComboBox" id="JComboBox Instance" index="3" parent="MyMainPanel Instance" window="TestGUI - QSQS FH 2008" />
<component class="javax.swing.JLayeredPane" id="JLayeredPane Instance" index="1" parent="JRootPane Instance" window="TestGUI - QSQS FH 2008" />
<component class="javax.swing.JLayeredPane" id="JLayeredPane Instance 2" index="1" parent="JRootPane Instance 2" window="Eingabe" />
...
<action args="JTextArea Instance,rth" method="actionKeyString" />
<action args="JTextArea Instance,insert-break" class="javax.swing.JComponent" method="actionActionMap" />
<event component="JTextArea Instance" keyCode="VK_ENTER" kind="KEY_RELEASED" type="KeyEvent" />
<action args="JTextArea Instance,Tschüss..." method="actionKeyString" />
<action args="TestGUI - QSQS FH 2008" class="java.awt.Window" method="actionClose" />
</sequence>
<terminate />
</AWTTestScript>
1.2 Abspielen der GUI-Events:
Es besteht nun die Möglichkeit über den Button "Ausführen" das komplette Skript laufen zu lassen. Dabei öffnet sich die GUI und alle zuvor aufgenommenen Aktionen werden automatisch ausgeführt.
Im Beispiel-Workspace wurde eine Klasse "MyTest.java" angelegt, in welcher die oben genannten
Testmethoden entsprechend implementiert wurden. Die Klasse "MyTest" kann über "Run As" --> "JUnit Test" als JUnit-Test gestartet werden.
Die Testklasse wird daraufhin ausgeführt und bedient sichtbar automatisch die sich öffnende GUI.
Anschließend erscheint folgendes Ergebnis des Testlaufs in der JUnit-Ansicht: