Webtests mit Selenium, Groovy, TestNG und Maven
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Web Webtests
Webtests mit
Selenium, Groovy,
TestNG und Maven
Im ersten Teil dieser Artikelserie [1] wurden Testkonzepte und Selenium [2] nä-
her vorgestellt. Dieser zweite Teil stellt die Integration in ein Projekt vor und run-
det das Thema mit einigen Good Practices ab.
von Thorsten Kamann und Martin Groh
reitagnachmittag, 16 Uhr. Eine tionen, die für die Ausführung der Tests Abfolge von Prozessen, wie in Abbildung
Woche manuelles Testen des notwendig sind (Abb. 1). 2 dargestellt.
neuen Release liegt hinter Bob. Nachdem Bob nun die Tests im Pro- Wenn ein Testlauf gestartet werden
Irgendwie hat es dann doch noch hinge- jekt gespeichert hat, muss er noch einige soll, wird zuerst ein lokaler Tomcat [5] ge-
hauen und sei es auch nur, weil das ein zusätzliche Ressourcen hinzufügen. Da- startet sowie die Webanwendung, die ge-
oder andere Testergebnis zum Wochen- zu gehört eine Test-Suite, die alle Tests zu- testet werden soll, deployt. Nach dem Start
ende hin etwas gnädiger bewertet wur- sammenfasst, die bei einem Testlauf aus- der Selenium-RemoteControl können
de. „Bei mir klappt’s“ denkt sich Bob und geführt werden sollen. TestNG [4] bietet die Tests, die in der testng.xml definiert
schaltet seinen Rechner aus. Zufrieden die Möglichkeit, mit einer testng.xml wurden, ausgeführt werden. Nach der
fährt er nach Hause. Am Montagmorgen Tests zusammenzufassen, die für einen Ausführung der Tests wird die Selenium-
stapeln sich jedoch in seiner Mailbox bestimmten Testlauf ausgeführt werden RemoteControl zusammen mit Tomcat
Nachrichten vom Server-Monitoring- sollen. Dabei ist diese Konfiguration sehr gestoppt und ein Testreport generiert.
System. Das neue Release der Weban- flexibel. Sie können mehrere Test-Suites Maven definiert für einen Build ei-
wendung hat viele Fehler verursacht. anlegen, zu denen Sie Tests mittels voll- nen Lebenszyklus. Dieser Lebenszyklus
qualifizierten Klassennamen genauso wird in verschiedene Phasen aufgeteilt,
Testfälle in ein Integrationstest- hinzufügen können wie ganze Packages die sich wiederum in so genannte Goals
projekt integrieren und Testgruppen. In Listing 1 sehen Sie unterteilen. Dieser Mechanismus bietet
Die Tests sollen automatisiert werden. eine testng.xml (im Beispielprojekt heißt sich an, um die Prozesskette aus Abbil-
Dazu will Bob Maven [3] verwenden. So diese Datei it-suite.xml und befindet sich dung 2 abzubilden. Im Folgenden ist
ist es sinnvoll, wenn das Projekt den Kon- unter src/test/config). In dieser testng.xml eine vereinfachte Übersicht des Maven-
ventionen von Maven folgt, da Maven wird eine Suite definiert, die alle Tests mit Build-Standardlebenszyklus dargestellt.
sich stark am Paradigma Convention over der Gruppe it-test aus dem Package sele-
Configuration orientiert. Maven schlägt nium.groovy.testng beinhaltet. validate: überprüft, ob alle Bedin-
eine Verzeichnisstruktur vor. Folgt ein Nun ist Bob schon ziemlich weit ge- gungen für einen Build erfüllt sind
Projekt diesem Vorschlag, vermindert kommen. Alle notwendigen Konfigura- compile: kompiliert Quellcode
sich die notwendige Konfiguration. Für tionen und der Quellcode sind erstellt. test: Führt Tests aus (für gewöhnlich
ein Projekt, das als Ziel die Erstellung von Es fehlt nur noch etwas Infrastruktur. sind das Unit-Tests)
Quellcode Integrationstests hat, ist der Verzeich- Bob möchte es seinen Teammitgliedern package: erzeugt das Archiv (jar, war,
auf CD nisbaum unter src/test interessant. Hier auch ermöglichen, die Integrationstests ear,…)
befinden sich der Quellcode der Tests, am lokalen Arbeitsplatz auszuführen. integration-test: führt Integrationtests
zusätzliche Ressourcen sowie Konfigura- Aus dieser Anforderung ergibt sich eine aus
86 javamagazin 9|2008 www.JAXenter.deWebtests Web
verify: überprüft, ob bestimmte (zu de- Tomcat und der Selenium-RemoteCon-
finierende) Qualitätsmerkmale erfüllt trol. Tomcat kann mit der Konfiguration
sind aus Listing 8 gestartet und gestoppt wer-
install: installiert das Paket in das loka- den. Dazu wird das Cargo-Plug-in [7] ver-
le Repository wendet. Dort haben Sie die Möglichkeit,
deploy: installiert das Paket in ein ent- so genannte Deployables zu konfigurieren.
ferntes Repository Ein Deployable ist eine Webanwendung als
WAR-Archiv. Cargo kann beliebige De-
Für die Ausführung der Integrations- ployables verwalten. Zu jedem Deployable
tests ist die Phase test und integration-test können Sie noch eine pingURL hinterle-
wichtig. In der Phase test wird der Quell- gen. Diese URL wird von Cargo angepingt,
code der Tests kompiliert und während um festzustellen, ob die Webanwendung
der Phase integration-test werden diese deployt und einsatzfähig ist.
Tests dann ausgeführt. In dem Beispielprojekt auf der Heft-
Die komplette Konfiguration eines CD haben wir den Tomcat mit in das Pro-
Maven-Build wird in der pom.xml (Lis- jekt integriert. Cargo unterstützt aller-
ting 2) hinterlegt. Diese befindet sich im dings auch die Verwaltung von entfernten Abb. 1: Verzeichnisstruktur des
Root-Verzeichnis des Projekts. Da die Servern. So können Sie ihre Webanwen- Integrationstestprojekts
Tests in Groovy verfasst sind, muss für dungen auch auf einem zentralen Test-
das Kompilieren der Tests ein Groovy- server installieren. Der letzte Bestandteil, wenn die gleichen Tests mit beiden Brow-
anstatt eines Java-Compilers gestartet der konfiguriert werden muss, ist die sern ausgeführt werden könnten. Die hier
werden. Dies erreicht Bob, indem er das Selenium-RemoteControl. Auch hierfür beschriebene Vorgehensweise bietet aber
Groovy-Maven-Plug-in zur pom.xml gibt es ein Maven-Plug-in [8] (Listing 6). einen einfachen Weg, die einmal aufge-
hinzufügt (Listing 3). Zusätzlich zu der Jetzt ist Bob fast fertig. Damit Sele- zeichneten Testskripte bequem auf ver-
Plug-in-Definition und -Konfiguration nium Firefox starten kann, muss sich schiedenen Browsern zu testen, so diese
ist es notwendig, dass noch die Abhän- dieser im Pfad befinden. Dies können Sie auf dem Testsystem installiert sind.
gigkeit zu Groovy definiert wird. sehr einfach überprüfen, indem Sie eine TestNG stellt entsprechende Para-
Damit die Tests schließlich ausgeführt Konsole oder die Eingabeaufforderung meter bereit, die bei der Ausführung auf
werden können, gibt es das Surefire-Ma- öffnen und den Befehl firefox eingeben. verschiedenen Browsern helfen. In der
ven-Plug-in [6]. Dieses Plug-in ist modu- Startet Firefox, dann ist alles korrekt
lar aufgebaut und unterstützt neben jUnit konfiguriert. Ist dies nicht der Fall, fü-
eben auch TestNG. Bei dem Surefire-Plug- gen Sie Firefox noch Ihre Path-Variable Listing 1
in handelt es sich um ein Test-Plug-in für hinzu. Nachdem alle Komponenten
Maven. Während der Lebenszyklusphase konfiguriert sind, kann Bob nun seine
test, versucht dieses Plug-in die TestNG- Integrationstests ausführen:
Tests auszuführen. Dies ist für unser Vor-
mvn –e clean integration-test
haben aber noch zu früh, da Tomcat und
die Selenium-RemoteControl noch nicht
gestartet wurden. Aus diesem Grund Maven startet in der Lebenszykluspha-
muss das Plug-in zur Phase test deaktiviert se pre-integration-test Tomcat und die
und für die Phase integration-test aktiviert Selenium-RemoteControl. Gleichzeitig
werden, da erst in dieser Phase die Test- wird die Webanwendung, die getestet
NG-Tests ausgeführt werden sollen. werden soll in den Tomcat installiert.
In Listing 4 sehen Sie die notwen- In der Phase integration-test werden die
dige Konfiguration. Neben der Abhän- Tests ausgeführt. Nach Beendigung der
Listing 2
gigkeit zu TestNG wird das Surefire- Testausführung erreicht Maven die Pha-
Plug-in konfiguriert. Dabei wird es mit se post-integration-test. In dieser Phase
tiviert. Zusätzlich wird hier die Suite- Test mit Firefox und IE 4.0.0
selenium-groovy-testng
XML-Datei angegeben, die ausgeführt Bisher wurden die Tests nur mit dem Fire-
selenium-groovy-testng-integration
werden soll. Hier besteht die Möglich- fox-Browser ausgeführt. Leider ist dies in
keit, beliebige Dateien anzugeben. unserer schönen Webwelt nicht ausrei- 1.0.0-SNAPSHOT
Nun kann Bob die TestNG-Tests aus- chend. Weit verbreitet ist bekannterweise
führen. Was noch fehlt, ist der Start von auch der Internet Explorer. Es wäre schön,
www.JAXenter.de javamagazin 9|2008 87Web Webtests
Listing 3
[…] false
org.codehaus.groovy src/test/config/it-suite.xml
groovy-all
1.5.6 stop-container
post-integration-test
undeploy
stop
org.codehaus.groovy.maven
gmaven-plugin
1.0-rc-1
generateStubs Listing 5
compile
generateTestStubs
testCompile
org.springframework.samples Listing 6
spring-petclinic
2.5.3 […]
war
[…] […]
org.openqa.selenium.client-drivers
selenium-java-client-driver
1.0-beta-1
Listing 4
org.codehaus.cargo
[…] cargo-maven2-plugin
0.3.1
org.testng […]
testng org.codehaus.mojo
5.5 selenium-maven-plugin
jdk15
true start-container
test pre-integration-test pre-integration-test
[…] start start-server
deploy
true
true
org.apache.maven.plugins
maven-surefire-plugin org.springframework.
2.4-SNAPSHOT samples
spring-petclinic
true war
http://localhost:8080/
petclinic/welcome.do
integration-test pingTimeout>300000
test petclinic
88 javamagazin 9|2008 www.JAXenter.deAnzeige
Web Webtests
Abb. 2: dem Firefox und dem Internet Explorer
Ablauf ausgeführt.
eines
automa- Wenn Selenium Firefox startet, wird
tisierten ein neues Profil mit Standardeinstel-
Integrati- lungen verwendet. Das kann zu einem
ontests
Problem führen, wenn z.B. Addons mit
gestartet werden, die eine eigene Startsei-
te anbieten. Um dies zu verhindern, kön-
nen Sie ein Profil vorbereiten und im Sele-
nium Maven-Plug-in konfigurieren [9].
Fazit
testng.xml können innerhalb einer Suite ten Suite der Internet Explorer. Damit Mit Bobs Hilfe konnten wir sehen, wie
diese Parameter hinterlegt werden, die dieser Parameter ausgewertet werden sich eine Testautomatisierung bewerk-
dann mit der @Parameter-Annotation kann, muss der Quellcode der Testklasse stelligen lässt, die sich in ein Continuous
in beliebige Methoden injiziert werden erweitert werden. Die interessante Me- Integration System integrieren lässt. Die
können. In Listing 7 wird die Test-Suite thode ist die beforeClass. Hier wird Se- Kombination der verschiedenen Tech-
dupliziert und mit einem Parameter ver- lenium bekannt gemacht, mit welchem niken macht den Charme der vorgestell-
sehen. Bei der ersten Suite wird Firefox Browser der Test ausgeführt werden ten Lösung aus. Mit etwas Fantasie kann
als Browser konfiguriert, bei der zwei- soll. Die Änderung an der Methode ist diese problemlos erweitert werden. In
minimal. Sie müssen den @Parameter vielerlei Hinsicht ist dieser Ansatz nicht
und einen Parameter zur Methodensig- vollständig, es gibt Spezialtools, die in
natur hinzufügen. Die letzte Änderung einigen Aspekten die vorgestellten Mög-
Listing 7
ist der Austausch des Browsernamens lichkeiten übertreffen. Allerdings han-
aus dem Aufruf für Selenium gegen den delt es hier um einen pragmatischen Lö-
Methodenparameter. Beim nächsten sungsansatz, der genug Flexibilität auch
Durchlauf werden die Tests jeweils mit für größere Projektaufgaben bietet.
Thorsten Kamann ist als unabhängiger Softwarearchitekt und Coach
bei itemis tätig. Seine Schwerpunkte sind webbasierte Technologien,
MDSD, leichtgewichtige und flexible Architekturen und Open Source. Er
ist Projekt-Lead bei der Fornax Platform, einer Plattform für die Entwick-
lung von MDSD-related Tools und aktiver Groovy Commiter. Darüberhi-
naus schreibt er Bücher, veröffentlicht regelmäßig Artikel in Fachmaga-
zinen und hält Vorträge auf Fachkonferenzen zu obigen Themen.
Martin Groh wird von der corporate quality consulting GmbH in
Siegburg als QM- und Prozessberater, Projektleiter und Testmanager
eingesetzt. In einer ganzen Reihe von Projekten konnte er sein Wissen
über fachliche und technische Tests funktionaler und nichtfunktionaler
Anforderungen vertiefen. Sein Steckenpferd sind dabei freie Tools und
Werkzeuge, die sich problemlos in den Projektalltag integrieren lassen.
Links & Literatur
[1] Thorsten Kamann, Martin Groh: Webtests mit Selenium, Groovy, TestNG
und Maven, Teil 1, in: Java Magazin 08.2008, S. 65–69.
[2] selenium.openqa.org
[3] maven.apache.org
[4] testng.org/doc/
Listing 8 [5] tomcat.apache.org
@Parameters([“browser”]) [6] maven.apache.org/plugins/maven-surefire-plugin/
@BeforeClass(groups=[“it-test”]) [7] cargo.codehaus.org
public void beforeClass(String browser){ [8] mojo.codehaus.org/selenium-maven-plugin/
selenium = new DefaultSelenium(“localhost”,
[9] mojo.codehaus.org/selenium-maven-plugin/start-server-mojo.html
SeleniumServer.getDefaultPort(),
[10] de.wikipedia.org/wiki/Kontinuierliche_Integration
“*”+browser,
baseUrl) [11] groovy.codehaus.org
} [12] selenium-ide.openqa.org
90 javamagazin 9|2008 www.JAXenter.deSie können auch lesen