<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    敏捷、分布式、ALM過程自動化、企業應用架構
    posts - 14, comments - 0, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    maven自動化測試環境搭建

    Posted on 2012-04-05 11:26 一酌散千憂 閱讀(1751) 評論(0)  編輯  收藏 所屬分類: 企業架構

    環境背景:

    我作為項目經理和技術架構管理人員負責公司一條生產線。討論之后,首席架構師希望我們能夠實施TDD。在實施TDD的過程中,設計實施過程的整體思路就是:單元測試用例文檔 - 實施單元測試 - 實施業務代碼修改業務代碼邏輯。實施人員需要參與每個環節,按照規范編寫單元測試用例文檔。單元測試我們按照模塊(模塊與人員基本沒有重合)劃分包(suite),保證實施起來不會產生干擾。。技術架構決定采用:mavenjunitsvn

     

    技術背景:

    技術架構設計上,我們封裝了dao層的實現,所以實施人員基本無需涉及dao層的開發。服務層我們采用了JAX-RS的服務規范,對外開發服務接口。

    在測試覆蓋率方面,我們基本不要求對dao層的單元測試,但要求在服務層的單元測試達到100%。由于服務層是Restful WS的模式,所以我們采用了模擬HTTP請求的方式在測試服務層。

    由于需要模擬HTTP的請求,所以我們在單元測試中采用了jetty作為內嵌服務器,單元測試開始時同一啟動,完成后關閉。

     

    實施過程:

    開發過程中,實際實施的時候發現一個問題,對于測試數據的管理問題。即測試當中需要一定的數據環境來驗證業務邏輯。這個數據環境如何建立?

     

    方案一,使用dbunithsqldb。在測試啟動時重建數據環境。

    否決,原因:

    1.與實際運行環境差異較大。

    2.反復重建數據環境,效率上有缺失。

    3.技術架構增加,學習和維護曲線較大。

     

    討論后決定使用

    方案二,獨立出一套測試數據庫,完整數據環境。考慮到增刪改與查詢的沖突,制定默認規則,如id20之內的不允許進行任何改動。以盡量隔離增刪改的影響。

     

    針對方案二,有一個較大的問題,如何在開發過程中自由的切換數據庫配置呢?由于我們還是用了Hudson作為CI服務器,還要考慮到打包的過程。整體考慮之后,有兩個步驟需要注意:

    一、開發過程。開發過程中,我們將配置直接指向測試數據庫。

    二、打包過程。使用了maven,存在單元測試配置與最終產品配置的沖突。

    所以最終問題的焦點集中在打包過程的maven配置方案。

     

    搜索之后比較好的資料有

    MAVEN:如何為開發和生產環境建立不同的配置文件 --我的簡潔方案

    http://www.tkk7.com/scud/archive/2010/10/27/336326.html

    這篇博客是介紹在maven 中使用mvn package -P test 這樣的自定義profile來實現的。這樣是可行的,但是在Hudson中無法實現一條命令切換兩套配置。

    于是繼續尋找,最終在maven的官方網站找到《Building For Different Environments with Maven 2》(http://maven.apache.org/guides/mini/guide-building-for-different-environments.html)看完文章之后發現,實際maven提供了一個非常好的插件maven-antrun-plugin,以實現某些ant的功能。此處還需要了解的知識就是maven的構建生命周期標準(http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html)。基于上述兩個知識點,我們制定出如下方案,在項目中建立測試配置目錄及產品配置目錄,在mavenpackage階段開始前,都使用測試配置,運行集成測試,完成在package階段前將產品配置覆蓋至打包文件夾內,然后進行打包。思路就是這樣,下面貼出pom文件的關鍵部分。

     

     

    POM.xml

    <!—profile 節點定義覆蓋文件的方式內容 -->

           <profiles>

                  <profile>

                         <id>product</id>

                         <build>

                                <plugins>

                                       <plugin>

                                              <artifactId>maven-antrun-plugin</artifactId>

                                              <executions>

                                                     <execution>

                                                            <id>pre_product</id>

                                                            <phase>prepare-package</phase>

                                                            <goals>

                                                                   <goal>run</goal>

                                                            </goals>

                                                            <configuration>

    <!—此處與ant的任務相似 -->

                                                                   <tasks>

                                                                          <delete file="${project.build.outputDirectory}/spring/dataSourceContext.xml" />

                                                                          <delete file="${project.build.outputDirectory}/log4j.properties" />

                                                                          <copy file="src/product/assembly/log4j.properties" tofile="${project.build.outputDirectory}/log4j.properties" />

                                                                          <copy file="src/product/assembly/spring/dataSourceContext.xml" tofile="${project.build.outputDirectory}/spring/dataSourceContext.xml" />

                                                                   </tasks>

                                                            </configuration>

                                                     </execution>

                                              </executions>

                                       </plugin>

                                </plugins>

                         </build>

                  </profile>

           </profiles>

     

    <!—構建過程 -->

           <build>

    <!—指定資源目錄 -->

                  <resources>

                         <resource>

                                <directory>src/test/resources</directory>

                                <includes>

                                       <include>**/*</include>

                                </includes>

                         </resource>

                         <resource>

                                <directory>src/test/assembly</directory>

                                <includes>

                                       <include>**/*</include>

                                </includes>

                         </resource>

                  </resources>

     

                  <finalName>po</finalName>

     

    <!—指定集成測試配置 -->

                  <plugins>

                         <plugin>

                                <groupId>org.apache.maven.plugins</groupId>

                                <artifactId>maven-surefire-plugin</artifactId>

                                <version>2.4.3</version>

                                <configuration>

                                       <junitArtifactName>junit:junit</junitArtifactName>

                                       <forkMode>once</forkMode>

                                </configuration>

                                <executions>

                                       <execution>

                                              <id>default-test</id>

                                              <phase>integration-test</phase>

                                              <goals>

                                                     <goal>test</goal>

                                              </goals>

                                              <configuration>

                                                     <skip>false</skip>

                                                     <includes>

                                                            <include>**/*TestSuitex.java</include>

                                                     </includes>

                                              </configuration>

                                       </execution>

                                </executions>

                         </plugin>

                  </plugins>

           </build>

    主站蜘蛛池模板: 亚洲日本国产乱码va在线观看| 亚洲AV综合色一区二区三区| 国产亚洲av片在线观看18女人 | 国产麻豆剧传媒精品国产免费| 18国产精品白浆在线观看免费| 免费jjzz在线播放国产| 亚洲欧洲日产国码二区首页| 暖暖日本免费中文字幕| 色吊丝最新永久免费观看网站| 亚洲精品乱码久久久久久蜜桃不卡 | vvvv99日韩精品亚洲| 亚洲精品福利网站| 四虎国产精品成人免费久久| 99久久国产免费-99久久国产免费| 国产男女猛烈无遮挡免费视频网站 | 亚洲av日韩av天堂影片精品| 免费看又黄又爽又猛的视频软件| 日韩在线免费视频| 国产av天堂亚洲国产av天堂| MM1313亚洲国产精品| 91香蕉在线观看免费高清| 亚洲av日韩av欧v在线天堂| 美女羞羞喷液视频免费| 成人黄色免费网址| 亚洲a级成人片在线观看| 成人电影在线免费观看| 四虎影视精品永久免费| 亚洲精品一二三区| 日韩免费观看一区| 亚洲精品国产情侣av在线| 日韩视频在线精品视频免费观看 | 亚洲一日韩欧美中文字幕在线| 99re在线免费视频| 亚洲成年人电影网站| 成年人性生活免费视频| 亚洲视频中文字幕在线| 免费精品一区二区三区第35| 亚洲男人的天堂www| 国产日韩久久免费影院 | 亚洲美女视频一区二区三区| 美女被免费喷白浆视频|