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.de
Webtests 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 87
Web 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.de
Anzeige
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.de
Sie können auch lesen