Webtests mit Selenium, Groovy, TestNG und Maven

Die Seite wird erstellt Leo Wittmann
 
WEITER LESEN
Webtests mit Selenium, Groovy, TestNG und Maven
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 mit Selenium, Groovy, TestNG und Maven
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