Integrierte und automatisierte GUI-Tests in Java
Gliederung Die Idee hinter GUI-Tests Herausforderungen und Probleme Techniken Jemmy-Framework Konzeptorientiertes Testen FIT (Framework for Integrated Tests) Praxisbeispiel Gliederung
"Kein Produkt menschlicher Intelligenz kommt fehlerfrei zur Welt. Wir formulieren Sätze um, trennen Nähte wieder auf, setzen Pflanzen um, planen Häuser neu und reparieren Brücken. Warum sollte es uns mit Software anders gehen?" Testen ist effektiv und wichtig Vorteile: GUI-Tests... agieren aus der Sicht des Endanwenders und nicht aus der Sicht des Programms testen nicht nur die GUI (Graphical User Interface), sondern auch das System als Ganzes Die Idee hinter GUI-Tests
Ziele sind es... Kostengünstige und effektive Tests zu schreiben Stabile und generische Tests zu schreiben Effizienz hängt vom Testerzeuger ab er muss das Programm besser kennen als der Entwickler Probleme entstehen wenn... die Software regelmäßig ihre Struktur ändert Die Testmodule nur selten ausgeführt werden Die Ergebnisse nicht durch eine Maschine verifiziert werden können Eine physische Interaktion des Anwenders benötigt wird Diese Tests können nicht automatisiert werden! Herausforderungen und Probleme
Im Laufe der Zeit haben sich zwei Techniken durchgesetzt: Recording: Es werden Mausbewegungen, Klicks und Tastatureingaben aufgenommen und abgespeichert. Scripting: Die Mausbewegungen, Klicks und Tastatureingaben werden über eine Skriptsprache definiert Recording Anlegen eines Tests ist schneller Benötigt in den meisten Fällen ein eigenes Replay-Tool Scripting Einfachere Anpassung des Tests an Änderungen Läuft auf jedem System Techniken
Jemmy Library zur Erzeugung automatisierter Tests Enthält Methoden um alle User-Eingaben die auf Swing/AWT- Komponenten ausgeführt werden können zu simulieren Nutzt die Scripttechnik Basiert selber auf Java Plattformunabhängig (sofern eine VM vorhanden ist) Lässt sich per Junit-Tests auführen Einfachere Konfiguration (enthält nur eine Jar-Datei) Jemmy-Framework
Ablaufplan: Find: Das finden der Komponente wird durch ComponentChooser realisiert, welche alle in der Swing-Anwendungen befindlichen Komponenten auf vorher definierte Kriterien untersucht (Name, Id, uvm.) und die passende zurückliefert. Do: Actions die auf der gefundenen Komponente ausgeführt werden sollen, werden durch Operatoren realisiert. Dafür gibt es für jede Komponentenklasse einen Komponentenoperator, welcher als Adapter alle Methoden der Komponente bereitstellt Jemmy-Framework
Bei Änderungen an der Software sollte der GUI-Test mit möglichst geringem Aufwand angepasst werden. Jemmy benutzt dafür das Prinzip des konzeptorientiertes Testens. Entwicklung von Tests unter der Annahme, dass etwas existiert (egal wie) Entkopplung des Testcodes von der GUI UI-abhängiges Testen Konzeptorientiertes Testen class MyTest() { public void testsetgreencolor() { new CarRecordDialogOperator().enterColor("green "); } } CarRecordDialogOperator() hat eine Bindug zum UI. Dort wird bspw. Ein Textfeld gesucht und die Farbe eingegeben. class MyTest() { public void testsetgreencolor() { new CarRecord().setColor(CarColor.GREEN)); } } Es wird angenommen, dass es einen CarRecord gibt und jeder Record eine Farbe bekommen kann. Wie das passiert ist irrelevant. Konzeptorientiertes Testen
Framework für die Automatisierung von Akzeptanztests Daten kommen nicht aus dem Quellcode sondern von externen Quellen (HTML, Excel,..) => Autor benötigt keine Programmierkenntnisse, die Fachseite kann Tests anlegen FIT (Framework for Integrated Tests)
Die Eingabedaten Daten für FIT-Tests werden tabellarisch erstellt Jede Zeile entspricht einem Testdurchlauf Für jeden Einzeltest enthalten die Spalten den Namen des Tests, die Eingabewerte und das erwartete Resultat, welche von der sogenannten Fixture verarbeitet werden. Fixture, welche die Eingabe parsed de.bauerkirch.myfixture E-Mail Adresse hp@bauer-kirch.de hp.test.de isvalid() true false Parameter an die Fixture (setzt Felder in der Fixture) Erwartete Rückgabe der Fixture-Methode isvalid FIT (Framework for Integrated Tests)
Demonstration von FIT und Jemmy anhand der Software Deutsche Post Einlieferungslisten Demonstration
Fragen?
Vielen Dank für Ihre Aufmerksamkeit!
Genutzte Literatur [1] Lauren Ruth Wiener, Digitales Verhängnis, ISBN 3893196722 [2] Mark Fewster, Software Test Automation, ISBN 978-0201331400 [3] Christian Ullenboom, Java ist auch eine Insel, ISBN 978-3-8362-1371-4 [4] Elfriede Dustin, Automated Software Testing, ISBN 0-20143-287-0 [5] http://www.torsten-horn.de/techdocs/java-fit.htm [6] http://www2.hs-augsburg.de/informatik/projekte/testen/ss2006/gui_schumann.pdf [7] https://jemmy.dev.java.net/ [8] http://fit.c2.com/ [9] http://www.javaworld.com/javaworld/jw-11-2004/jw-1115-swing.html Literatur