Maven實現Web應用整合測試自動化 -- 部署自動化(WebTest Maven Plugin)

來源:互聯網
上載者:User

標籤: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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.