標籤:java 自動化 maven 測試 部署
上篇:Maven實現Web應用整合測試自動化 -- 測試自動化(WebTest Maven Plugin)
之前介紹了如何在maven中使用webtest外掛程式實現web的整合測試,這裡有個遺留問題,就是在執行maven的intergation測試時候web應用已經部署在容器中處於in service的狀態,那麼web應用的部署是否可以自動化呢?在我們公司的系統中,由於使用了weblogic的cluster,自己寫了腳步來實現部署,花費了不少人力物力,其實java web應用早就有福音了,是一款自動安裝容器和部署應用的外掛程式神器:cargo-maven2-plugin,這外掛程式可以相容所有目前主流的伺服器如jboss、tomcat、glassfish、jetty等。
它的配置很簡單,在build裡面加入cargo-maven2-plugin,為了實現整合測試自動化,聲明整合測試階段之前調用cargo:start啟動容器和部署應用,整合測試結束後調用cargo:stop關閉容器。預設start啟動的容器在maven生存周期結束之後就會結束,有時候為了調試方便,可以調用cargo:run來啟動容器和部署應用,在需要的時候再通過Ctrl+C結束容器運行。
為了實現容器啟動和部署自動化,還需要提供一些配置參數給外掛程式,下面給出個樣本,Cargo還有很多其它的功能,具體可以參考:Cargo自動部署官方網站
<plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>${project.cargoPluginVersion}</version> <configuration> <!-- 定義container --> <container> <!-- container類型 jetty/tomcat/weblogic/jboss etc --> <containerId>${project.cargo.container}</containerId> <!-- 指定容器下載路徑,儲存路徑,解壓路徑,放在target目錄可以在clean的時候自動清除--> <zipUrlInstaller> <url>${project.cargo.container.url}</url> <downloadDir>${project.build.directory}/${project.cargo.container}/downloads</downloadDir> <extractDir>${project.build.directory}/${project.cargo.container}/extracts</extractDir> </zipUrlInstaller> <!-- cargo log 儲存 --> <log>${project.build.directory}/logs/cargo.log</log> <!-- container log 儲存 --> <output>${project.build.directory}/logs/container.out</output> </container> <!-- 添加container相關的配置資訊 --> <configuration> <!-- 設定deploy home --> <home>${project.build.directory}/${project.cargo.container}/container</home> <!-- <type>existing</type> existing type是使用已有的容器,在開放環境中使用,整合測試 一般使用預設的install type,每次重新建立所有資源,保證每次測試環境OK,還有一種 遠程部署runtime type (見下面注釋),方便遠程部署測試--> <properties> <!-- --> <project.cargo.hostname>${project.cargo.host}</project.cargo.hostname> <cargo.servlet.port>${project.cargo.port}</cargo.servlet.port> <cargo.servlet.uriencoding>${project.build.sourceEncoding}</cargo.servlet.uriencoding> <!-- 為了防止和環境中其他節點衝突,可以設定容器專門屬性, <cargo.tomcat.ajp.port>8123</cargo.tomcat.ajp.port> <cargo.tomcat.manager.protocol>http</cargo.tomcat.manager.protocol> <cargo.tomcat.manager.hostname>127.0.0.1</cargo.tomcat.manager.hostname> <cargo.tomcat.manager.port>8080</cargo.tomcat.manager.port> <cargo.tomcat.manager.username>admin</cargo.tomcat.manager.username> <cargo.tomcat.manager.password>1234</cargo.tomcat.manager.password> --> </properties> <!-- for remote deploy, also container type should be remote <type>runtime</type> <properties> <cargo.remote.username>username</cargo.remote.username> <cargo.remote.password>password</cargo.remote.password> </properties> --> </configuration><pre> <!-- 需要部署的應用配置 --> <deployables> <deployable> <!-- group/artifact使用預設值部署本應用,預設從maven output擷取部署套件,可以在location中指定 <groupId>war group id</groupId> <artifactId>war artifact id</artifactId> <location> war location</location> --> <type>war</type> <properties> <context>optional root context</context> </properties> <pingURL>optional url to ping to know if deployable is done or not</pingURL> <pingTimeout>optional timeout to ping (default 20000 milliseconds)</pingTimeout> </deployable> </deployables> <!-- 定義打包路徑 --> <packager> <outputLocation>${project.build.directory}/packaged</outputLocation> </packager> </configuration> <executions> <!--為了完成整合測試,在開始整合測試之前啟動容器和部署應用 --> <execution> <id>start-container</id> <phase>pre-integration-test</phase> <goals> <goal>start</goal> </goals> </execution> <!--測試完成後,關閉容器 --> <execution> <id>stop-container</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> <!--關閉容器後打包容器留作日後分析 --> <execution> <id>package-container</id> <phase>post-integration-test</phase> <goals> <goal>package</goal> </goals> </execution> </executions> </plugin>
Maven實現Web應用整合測試自動化 -- 部署自動化(WebTest Maven Plugin)