© DrHitch/Shutterstock.com
Spock, Geb und Selenium

2 Kombinierter Einsatz der Testframeworks Spock und Geb


Die beiden Frameworks Spock und Geb bilden gemeinsam eine starke Kombination zur Ausführung funktionaler Tests. Aus der Welt von JavaScript dürften den meisten Entwicklern Teile der in Geb verwendeten Syntax schon bekannt vorkommen.

Im ersten Kapitel wurde Spock [1] für die Durchführung von Unit sowie Integrationstests betrachtet. In diesem Kapitel wird auf funktionale Tests von Webapplikationen eingegangen. Da Spock eigenständig nicht in der Lage ist, funktionale Tests durchzuführen, bedarf es der Verwendung weiterer Komponenten. Naheliegend ist hier die Nutzung von Geb [2], da damit Browser zum Testen von Applikationen gesteuert werden können.

Geb fügt sich nahtlos in die Spock-Infrastruktur ein. Dies liegt insbesondere an den ähnlichen Konzepten der beiden Frameworks. Geb nutzt ebenfalls eine DSL (Domain-specific Language), die wiederum auf der Programmiersprache Groovy basiert. Gleichwohl ist Geb unabhängig von Spock und läuft auch hervorragend in Verbindung mit JUnit.

Ähnlich wie Spock ist Geb noch nicht im Stadium der Version 1.0, aber dennoch – aufgrund seiner Stabilität – seit über drei Jahren im produktiven Einsatz in Projekten.

Spock in Kombination mit Geb

Abbildung 2.1 zeigt die Integrationsarchitektur der beiden Frameworks sowie den Aufrufablauf. Angestoßen wird ein Test zunächst durch ein Build-Werkzeug oder die Entwicklungsumgebung. Ausgangsbasis und ausführendes Testframework ist weiterhin Spock. Über einen Adapter, der im Testcode selbst nicht sichtbar ist, erfolgt die Integration des Geb-Codes. Für den Zugriff und die Steuerung der Browser greift Geb auf WebDriver [3] zurück, das von Google gesponsert wird. Es existieren WebDriver-Implementierungen zur Ansteuerung verschiedener Browser, sodass mit Geb auch so genanntes Cross-Browser-Testing ermöglicht wird.

kraft_1.png

Abbildung 2.1: Architektur

class JavaMagazinHomeSpec extends GebReportingSpec {
def "check homepage from the Java Magazin"() {
when:
go "http://jaxenter.de/java-magazin"
then:
title == "| JAXenter.de"
$("#logo").@alt == "JAXenter.de"
}
}

Listing 2.1

Für die Illustration kommt in diesem Kapitel die Homepage des Java Magazins (http://jaxenter.de/java-magazin) zum Einsatz (Abb. 2.2). Eine erste einfache Testklasse mit dem Aufruf der Startseite sieht wie in Listing 2.1 aus.

kraft_2.png

Abbildung 2.2: Homepage des Java Magazins

Eine Featuremethode kann weiterhin mehrere Blöcke enthalten. Zunächst ist zu sehen, wie im when-Block auf die angegebene Seite mit der Geb-Notation go navigiert wird. Anschließend erfolgt im then-Block die Überprüfung der Bedingungen. Der Titel der HTML-Head-Sektion wird in der ersten Zeile überprüft. Die zweite Bedingung verifiziert anhand eines Selektors das Vorhandensein des Logos sowie dessen Alternativtext.

Eine Änderung zu den bereits vorgestellten Tests mit Spock ergibt sich in der Vererbungshierarchie. Statt wie bisher von der Klasse Specification zu erben, wird auf die Klasse GebReportingSpec zurückgegriffen. Diese Klasse erbt von der Spock-Basisklasse und enthält zusätzlich spezifische Erweiterungen für Geb.

Vor der Ausführung von Testfällen müssen zunächst die Abhängigkeiten definiert werden. Nachfolgend ist die Konfiguration für Gradle beim Einsatz von Chrome dargestellt:

testCompile "org.codehaus.groovy:groovy-all:2.3.6"
testCompile "org.spockframework:spock-core:0.7-groovy-2.0"
testCompile "org.gebish:geb-spock:0.9.3"
testCompile "org.seleniumhq.selenium:selenium-chrome-driver:2.43.1"

Das Ergebnis nach der Ausführung von Geb-Tests ist wie bei Spock oder auch JUnit ein Report mit der Auflistung der erfolgreichen und gescheiterten Tests sowie ggfs. weiteren Informationen zu den fehlgeschlagenen Codesegmenten. Zusätzlich werden mit Geb standardmäßig Screenshots erstellt, die bei Fehlern den aktuellen Zustand des Browsers zeigen und damit die Fehlersuche enorm erleichtern.

Die Selektionssyntax

Im Vergleich zu anderen funktionalen Testframeworks wie Selenium existieren für Geb keine Werkzeuge zum automatisierten Aufzeichnen ...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang