Automatisierte Selenium-Tests mit Maven

Funktionale Oberflächentests mit Selenium stellen eine effektive Methode zur Erhöhung der Qualität einer Webanwendung dar. Seit Selenium 2.0 können die Tests dabei durch die Unterstützung von HtmlUnit auch ohne Browser (headless) und damit vor allem auch wesentlich schneller ausgeführt werden. Weitere Unterschiede zu Version 1 können im Blogeintrag “Selenium 2 – Differences to Version 1″ nachgelesen werden.

Zur Ausführung des Tests ist allerdings auch bei Verwendung von HtmlUnit weiterhin ein laufender Server mit der zu testenden Anwendung notwendig. Um die Tests automatisch während des Build-Vorgangs auszuführen, muss also auch automatisch ein Server gestartet und gestoppt werden. Dies kann mit dem “Maven Jetty Plugin” erreicht werden. Die Konfiguration in der “pom.xml” sieht dann wie folgt aus:


    org.mortbay.jetty
    maven-jetty-plugin
    6.1.10
    
        10
        foo
        9999
    
    
        
            start-jetty
            pre-integration-test
            
                run
            
            
                0
                true
            
        
        
            stop-jetty
            post-integration-test
            
                stop
            
        
    

Das Plugin startet den Jetty in der Lifecyle-Phase “pre-integration-test” und deployed automatisch die zuvor erstellte Webanwendung in diesen Server. Nach der Ausführung der Integrationstests in der Phase “integration-test” wird der Jetty in der Phase “post-integration-test” wieder automatisch gestoppt. Die genaue Abfolge der einzelnen Phasen des Maven-Builds ist der Maven Lifecyle Reference zu entnehmen.

Nun besteht allerdings noch ein weiteres Problem, da Selenium-Tests als Unit-Tests implementiert werden und diese normalerweise bereits in der Phase “test” und nicht in der Phase “integration-test” des Maven Lifecycles ausgeführt werden. Durch die folgende Konfiguration in der “pom.xml” kann die Ausführung der Unit-Tests in die Phase “integration-test” verschoben werden, so dass die Tests in der Zeit ausgeführt werden, in welcher der Jetty läuft (zwischen den Phasen “pre-integration-test” und “post-integration-test”).


    org.apache.maven.plugins
    maven-surefire-plugin
    2.8.1
    
        
            **/*Test.java
        
    
    
        
            integration-tests
            integration-test
            
                test
            
            
                false
                
                    none
                
                
                    **/*Test.java
                
            
        
    
Short URL for this post: http://blog.oio.de/DkzL1
This entry was posted in Build, config and deploy, Java and Quality and tagged , , , , , , . Bookmark the permalink.

One Response to Automatisierte Selenium-Tests mit Maven

  1. Martin says:

    Da in meinen Projekten häufig Apache3 Tomcat als Laufzeitumgebung eingesetzt wird, bevorzuge ich das cargo-maven2-plugin. Dadurch vermeide ich die Verwendung unterschiedlicher Laufzeitumgebungen für Build, Test und Produktion. Außerdem sollte anstelle des surefire-Plugins das maven-failsafe-plugin eingesetzt werden. Dieses erlaubt ein ordnungsgemäßes herunterfahren des Servers – auch im Fehlerfall. Die Konfiguration entspricht im Prinzip der in diesem Blogeintrag gezeigten.

Leave a Reply