Name

Abbot

Homepage

http://abbot.sourceforge.net

Lizenz

Common Public License (CPL)

Untersuchte Version

Abbot 1.2

Letzter Untersuchungszeitpunkt

10.08.2012

Kurzbeschreibung

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:

Fazit

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.

Einsatzgebiete

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.

Einsatzumgebungen

Abbot kann auf verschiedenen Wegen genutzt werden:

Installation

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:

Anwendung Costello

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:

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.

Dokumentation

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.

Wartung der Projektseite

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.

Nutzergruppen und Support

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.

Intuitive Nutzbarkeit

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.

Automatisierung

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.

ANT
Die Automatisierung des Abbot Frameworks mit Hilfe von ANT ist über die JUnit-Tasks Ausführung möglich. Dazu werden JUnit-Testklassen angelegt, die mit Hilfe des Abbot-Frameworks die Oberflächen-Tests durchführt. 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 Testfälle ähnelt stark der Ausführung von JUnit-Testfällen. Der Abbot-Testfäll 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 beim Kompilieren und bei der Ausführung auf die Abbot-Bibliothek zwar zugreifen, dies ist allerdings leicht mit Hilfe des <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
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
Im Vergleich des Aufwands liegen die beiden build-Werkzeuge circa gleich auf. Bei Maven muss zwar das benötigte JAR-Archiv noch in das lokale Repository gespeichert werden, allerdings ist dieser Aufwand auch nur einmalig da. Die Ausführung der einzelnen Tests wird dann mit Hilfe von JUnit-Testfällen vollzogen und ist somit leicht integrierbar.

Einführendes Beispiel

Ressourcen:

Einfaches Beispiel von Abbot. Es werden 4 Buttons auf einem Panel nacheinander geklickt und das Label abgefragt:

Ausführliches Beispiel mit einer Abbot-Testklasse:
Beispiel eines fertigen Costello-Skripts:

1. Erstellen eines automatisierten Skriptes mit Costello

Im ersten Schritt muss ein neues Skript angelegt werden. Dazu wählt man "Datei" --> "Neues Skript". Im nächsten Fenster müssen im rechten Fensterbereich die Parameter der zu testenden GUI festgelegt werden: Der für das Feld "Argumente" normalerweise korrekte Eintrag sollte "String[] args" lauten. Dies führte jedoch zu folgender Fehlermeldung...

 "Can't convert the String "String[] args" into an instance of [Ljava.lang.String;"

...und lässt sich sicher auf eine falsche Interpretierung durch den Editor zurückführen.

Die oberste Zeile "launch" wird nach Eingabe automatisch ergänzt.

Anschließend muss das Skript noch über "Datei" --> "Speichern unter..." gespeichert werden.
Daraufhin sollte das Fenster wie folgt aussehen:

Neues Skript

Anschließend wird der Button "Ausführen" gedrückt und die Meldung "invoking test case done..." erscheint im Statusbereich.

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.
Jetzt kann die sich öffnende GUI nach Belieben bedient werden. Sämtliche Interaktionen werden nun mitgeschnitten und im Fenster des Costello-Editors protokolliert.
Die GUI des getesteten Programms kann daraufhin geschlossen werden. Im Hauptfenster von Costello ist nun ein neuer Eintrag "Sequence" erschienen, welcher sich öffnen lässt und alle gefangenen Ereignisse tabellarisch auflistet:

abbot4

Beim Auswählen eines Ereignisses werden im rechten Fensterbereich weitere Details zum jeweiligen Event angezeigt:

abbot5

Hier wurde z.B. der String "ththrthsfthsthiarhgkdrg" in eine JTextArea eingegeben.
Jeder Eintrag lässt sich im Nachhinein flexibel anpassen!

Über "Datei" --> "Speichern" kann das Skript nun gespeichert werden. Die im XML-Format erzeugte Datei enthält jetzt entsprechend alle dargestellten Events:

Hier ein Ausschnitt:

<?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.

Hierzu noch ein anschauliches Beispiel in Form eines ausführbaren .jar-Archivs Polygon.jar und einem mit Costello erstellten Skript polyScript, durch welches in der Polygon-GUI automatisch ein Haus gezeichnet wird. (Hier muss allerdings vor dem Start der Classpath innerhalb Costello oder in Zeile 23 der Skriptdatei angepasst werden).

2. Implementieren einer eigenen Test-Klasse:

Wie im Kapitel Installation bereit erwähnt, müssen, um Abbot in Eclipse zu nutzen, die relevanten Jar-Dateien von Abbot als "External Jars" dem Projekt hinzugefügt werden. Zur Nutzung der Abbotklassen werden folgende Pakete importiert.

abbot

Die Testklasse muss von "ComponentTestFixture" erben. Da Abbot JUnit 3.8.1 als Grundlage nutzt, werden in den Methoden "setUp" und "tearDown" benötigte Objekte angelegt und initialisiert. Wichtig zum Testen der GUI-Elemente ist das "tester"-Objekt der Klasse "ComponentTester".

abbot1

Anschließend können die eigenen Testmethoden implementiert werden, welche die entsprechende Funktionalität der GUI-Elemente testen. Zum Testen von Buttons muss ein ActionListener für einen "clickType" implementiert werden. Dieser "clickType" registriert die GUI-Aktionen. Mit Hilfe des "tester"-Objektes kann sehr bequem mit verschiedenen click-, drag- und select-Methoden auf die GUI-Elemente zugegriffen werden.

abbot2

Das "tester"-Objekt bietet ebenfalls die Möglichkeit Menü-Leisten zu testen.

abbot3

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:

abbot6


Detaillierte Beschreibung

Siehe Dokumentationen und Tutorials auf der Webseite des Herstellers.

Literatur

keine

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