Services – TDD mit Vaadin Testbench, Java, Hibernate, JBoss

Sonntag, 26. Juli 2015 von  
unter Fachartikel Architektur

 Die Motivation

Wie zusätzliche Selenium-Tests für die Benutzerschnittstelle einer Browser-Applikation mit dem Selenium FireFox-PlugIn durchgeführt und diese Tests gespeichert werden können, ist bereits in diesem Blog-Eintrag hier beschrieben. Selenium Tests können gespeichert und in einer Test-Suite zusammengefasst werden, um auch später jederzeit die korrekte Funktionsweise der Eingabe-Aktionen und Link-Aufrufe der Web-Applikation verifizieren zu können, indem die mittels Selenium IDE PlugIn durchgeführten Tests automatisiert ausgeführt werden.

Auch über Arquillian Tests für das Service-Backend wurde in diesem Blog-Eintrag hier bereits berichtet.

Wie QUnit-Tests für die REST-Services funktionieren, wurde in dem Blog-Eintrag hier erklärt. Über Integrations-Tests von JBoss Seam RichFaces-Applikationen mittels Test-Framework TestNG gibt es ebenfalls einen Blog-Eintrag hier. Wie sieht es nun mit dem Erstellen und Ausführen von Integrations-Tests für mittels Vaadin-Framework implementierte Browser-Applikationen aus?

Angesichts der Vielzahl von Test-Frameworks dürfte die Antwort nicht überraschen, denn auch hierfür gibt es sinnvolle Testmöglichkeiten, die mit geringem Aufwand effektive Tests und eine gute Testabdeckung ermöglichen.

Bei dieser Gelegenheit darf auch auf das sehr effektive, interessante und erfolgreiche Seminar
“TDD mit Java”

hier und hier von Binaris Informatik hingewiesen werden.

Die Beispiel-Applikation

Über eine mittels Vaadin-Framework und Hibernate für den JBoss AS entwickelte Beispiel-Applikation gibt es bereits einen Blog-Eintrag hier. Zum Erstellen sinnvoller Tests für diese und andere Vaadin Web-Applikationen soll die “Vaadin Testbench“ (Version 3 oder 4) verwendet werden.

Die Basics

Über die Vorbereitung, Durchführung und Wiederholung von integrativen Vaadin Testbench Tests gibt es im offiziellen Vaadin-Channel eine ganze Reihe von informativen Lernvideos, z. B. diese hier:

  1. Installation der Vaadin Testbench:

https://www.youtube.com/watch?v=YLYdE0iRh6A

  1. Die Verwendung des Vaadin Testbench Recorders:

https://www.youtube.com/watch?v=bx8lWGf8guk

  1. Selektoren definieren und verwenden:

https://www.youtube.com/watch?v=O4uy_m_3bR0

  1. Testen optimieren und die Tests verbessern:

https://www.youtube.com/watch?v=pSWPQ8rO2Ok

Zu 1. a) Installation der Vaadin Testbench in den folgenden Schritten:

– Die Testbench basiert auf dem Selenium 2 WebDriver.

– Features wie z. B. “Screenshot Vergleiche“ sind zusätzlich vorhanden.

– Der Download und die Installation erfolgt entweder von der Vaadin Webseite vaadin.com

– oder seit der Version Testbench 3.0.3. aus dem Maven Repository: https://vaadin.com/maven.

– Es kann auch das vorhandene all-in-one Jar ohne vorherigen Maven Build direkt aufgerufen werden.

Zu 1. b) Erste Schritte und Tests mit dem Maven Beispiel Projekt aus dem Download Package:

– Import des Sample Projects ‘testbenchsample’ in die Eclipse Entwicklungsumgebung.

– Im ‘test‘-Unterverzeichnis gibt es bereits einige mit der Vaadin Testbench erstellte Beispiel-Tests.

– Ausführen der Tests im Rahmen des maven clean install

Maven deployt die Applikation mittels dem Eclipse Jetty PlugIn und startet den FireFox per Testbench.

– Die Integrationstests werden danach ausgeführt, also genau wie z. B. JUnit oder TestNG-Tests.

– Der Build mittels Ant und das anschließende Ausführen der Tests ist ebenfalls möglich.

– Erst wenn alle Tests fehlerfrei ausgeführt wurden, ist der Build erfolgreich.

– JUnit ist die Default-Struktur der Testbench-Tests.

– Jeder Test ist, wie in früheren JUnit Versionen, von einer Basisklasse ‘TestBenchTestCase‘ abgeleitet.

– Die Test-Magic geschieht durch Aufruf des verwendeten, von TestBench gekapselten WebDriver-APIs.

– Der Test eines Vaadin-Projekts läuft auf einem WebServer (hier mittels jetty-plugin).

– Die Tests können nach erfolgreichem Build auch aus dem JUnit-Kontextmenü ausgeführt werden.

Zu 2. Die Verwendung des Vaadin Testbench Recorders:

– Das Erstellen ganz neuer Tests ist, analog zu den hier beschriebenen Selenium Tests, per Recorder möglich.

– Tests können auch direkt selbst implementiert, oder eben schneller per Recorder aufgezeichnet werden.

– Der Recorder erstellt auch direkt einen Startpunkt für den auszuführenden Test mit.

– Installation des Testbench Recorders möglich als FireFox AddOn aus dem Download Package.

– Die Installation des ‘vaadin-testbench-recorder-3.0.0-beta.xpi‘ erfolgt z.B. per Add-ons Manager.

– Dann wird die zu testende WebApplikation deployt: Run As/Maven build/Goals: jetty run.

– Dann erfolgt der Aufruf der Web-Applikation über die entsprechende Url.

– Mittels Path-Parameter ‘restartApplication‘ wird vor dem Start des Recorders die Web-Applikation reinitialisiert.

– Unter Tools/Vaadin Testbench Recorder wird dann der Recorder gestartet.

– Dann wird der Testablauf eines einzelnen Tests durchgeklickt.

– Mittels Kontextmenü auf der Browser-Applikation wird das Test-Ergebnis per Assert verifiziert.

– Dann wird der Test als JUnit Test exportiert und in ‘tests‘ gespeichert: File/Export Test Case As/JUnit Test.

– Im Test-Verzeichnis des Projekts wird nun noch der vollqualifizierte Package-Name des Test korrigiert.

Zu 3. Selektoren definieren und verwenden:

– In mittels Testbench Recorder erstellten Tests können leicht die von einem Tester innerhalb des Testablaufs eines einzelnen Tests durchgeführten User Interaktionen simuliert und aufgezeichnet werden.

– Hierfür werden Teile der Benutzerschnittstelle per Selektoren (z. B. IDs) strukturiert ansprechbar gemacht.

– Es gibt verschiedene Selektoren (z. B. Dom-Ids) für verschiedene Anwendungsfälle.

– IDs werden über setDebugId() gesetzt und in einem Test aufgerufen.

– Testbench bietet weitere Selektoren für Vaadin-Tests an.

– IDs können deaktiviert werden mittels der Methode private boolean useDebugIds() { return false; }

– Dadurch werden User Interaktionen ohne ID des angesprochenen Elements aufgezeichnet.

– Vaadin Selektoren starten bei Verwendung des Recorders am nächstgelegenen Dom-Identifier.

– Das geklickte Element wird in der Element-Hierarchie z. B. mittels XPath-Ausdrücken/-Selektoren gefunden.

– XPath-Ausdrücke können auch direkt per ‘Inspect Element‘ im Kontext-Menü ‘Copy XPath‘ erhalten werden.

– XPath-Ausdrücke können vom Testbench Recorder ebenfalls öfter erzeugt werden.

– Hierfür werden die Vaadin Selektoren in der Priorität weiter nach unten verschoben.

– Dies geschieht unter: Vaadin Testbench Recorder/Locator Builders/Vaadin ganz nach unten setzen.

– Per XPath können Dom Struktur Eigenschaften und einzelne Funktionen angesprochen werden.

– Hiermit können Tests besser strukturiert und ihr Code reduziert werden.

– Die Komplexität wird dadurch geringfügig erhöht.

– Auch weitere Selektoren, wie CSS-Selektoren und CSS-Klassennamen, werden von der Testbench unterstützt.

– Dies geschieht im Testcode durch die Verwendung von ‘By.class‘,‘By.id‘,‘By.xpath‘.

Zu 4. Testen optimieren und die Tests verbessern:

– Die per Vaadin Testbench Recorder aufgezeichneten Tests können durch Refactorings verbessert werden.

– Der Vaadin Testbench Recorder generiert JUnit Tests in Java, was für Refactorings optimal ist.

– Refactorings verbessern die Qualität der Tests hinsichtlich:

– Code Qualität, Lesbarkeit, Codemenge, Test-Laufzeit, Konfigurierbarkeit, Testabdeckung.

– Refaktorisierte Methoden: clickPlus(), clickEquals(), verifyValue(…), typeNumber(), calculate(n, m), etc.

Man sieht also: Das Testen von Vaadin Web-Applikationen ist mittels Vaadin Testbench sehr effektiv möglich und wie bei JUnit Tests oder Selenium Tests leicht automatisierbar. Hier noch weitere interessante Infos:

Die neuste Vaadin Testbench 4:

https://vaadin.com/add-ons/testbench?gclid=COHQ4PXf-MYCFe-WtAodQPQN8A

Die Dokumentation der Testbench 4 (Book of Vaadin):

https://vaadin.com/book/-/page/testbench.html

Basisinformationen zur Vaadin Testbench:

https://vimeo.com/9470443

Vaadin Testbench auf GitHub:

https://github.com/vaadin/testbench

Die offiziellen Vaadin Maven Archetypen (https://vaadin.com/maven):

https://www.youtube.com/watch?v=0asUNpudti0

Die bei Selenium Tests verwendeten Design Patterns:

http://code.google.com/p/selenium/wiki/DesignPatterns

Allen interessierten Leserinnen und Lesern weiterhin viel Freude bei der agilen Softwareentwicklung mittels Scrum und dem Test Driven Development mit Java sowie schöne Sommerferien.

Kommentare

Die Kommentare sind geschlossen.