2010-10-07 90 views
3

我最近開始將我的項目從ant移植到maven。我有兩個模塊在我的應用程序中,我可以使用maven構建。Maven 2多模塊pom

現在我有自動化測試項目,它使用Web Driver來測試UI功能。我正在嘗試使用maven的方法是構建兩個模塊戰爭並將它們部署到tomcat上。然後針對它們運行自動化測試,並在自動化測試通過時傳遞構建。我已經配置我的POM像這樣(只提的重要組成部分):

<packaging>pom</packaging> 
<modules> 
     <module>../module1</module> 
     <module>../module2</module> 
</modules> 

現在,這兩個項目得到建立和部署,但它不運行自動化測試。我認爲的原因是包裝類型是POM。但是,如果我將它改爲戰爭,它會開始拋出錯誤。

我能想到爲自動化和父POM創建第三個POM也包含它作爲模塊。但我在想這是否是一種正確的方式。這應該是一個非常常見的情況,maven應該直接支持它。

+0

您的測試模塊是不同的項目還是隻是包裝結構的一部分? – 2010-10-07 07:29:04

+0

它的一個不同的項目... – 2010-10-07 07:58:55

+0

然後,我會爲該項目創建一個pom並將其正確設置爲hiererchy,然後運行'mvn compile test' – 2010-10-07 08:31:33

回答

4

(...)自動化模塊是基於WebDriver的自動化測試用於測試UI。這取決於網絡戰,但沒有軟件包依賴。我正在使用貨運maven插件部署到tomcat。我想在運行自動化測試之前從源代碼構建網絡戰,然後在tomcat上部署,然後運行測試。我可以做所有這些使用螞蟻構建,但無法使用maven

這絕對是可行的(我做了很多時間)。但我不確定要了解您當前的項目結構(尤其是測試所在的位置)。

這裏是我建議的結構:

 
. 
├── functests 
│   ├── pom.xml   // here we configure maven to run cargo & it tests 
│   └── src 
│      └── it 
│       ├── java 
│       │   └── ... // functional tests will go here 
│       └── resources 
├── pom.xml    // aggregating pom 
└── mywebapp    // the application under test 
    ├── pom.xml 
    └── src 
       ├── main 
       │   ├── java 
     │ ├── resources 
       │   └── webapp 
       └── test 
      ├── java 
        └── resources 

而對於POM設置的細節,看看Functional testing with Maven, Cargo and Selenium,它包含了所有所需的詳細信息。

+0

謝謝Pascal ......我正在尋找什麼,還有一篇非常漂亮的文章...... – 2010-10-08 04:18:57

0

「我能想到創造第三個pom」
你是否只有兩個POM?每個項目/模塊都需要自己的POM。

看看這裏的集成測試使用Maven的更多信息:http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing

編輯: 我不明白你的項目佈局看起來什麼樣。但我想它應該以某種方式是這樣的:

文件結構

myWebApp/ 
    pom.xml 
    myWebApp-web/ 
     pom.xml 
    myWebApp-integration-tests/ 
     pom.xml 

/myWebApp/pom.xml

<packaging>pom</packaging> 
<modules> 
    <!-- packaging: war; here are the sources and unit tests --> 
    <module>myWebApp-web</module> 

    <!-- packaging: java; here are the integration tests --> 
    <module>myWebApp-integration-tests</module> 
</modules> 

採用這種設置,/myWebApp/mvn deploy將執行以下步驟:

  1. 建立根項目(什麼都不做,因爲沒有資源)
  2. 構建myWebApp的Web
  3. 部署myWebApp的Web(已在/myWebApp/myWebApp-web/pom.xml配置)在myWebApp集成的測試

這應該做你想做的

  • 執行測試。

  • +0

    謝謝你的答覆阿里安。我已經有三個pom了。我想要實現的是這個第三個項目的構建應該構建前兩個,然後才能觸發測試。 – 2010-10-07 09:10:17

    +0

    我相應地擴展了我的答案。 – Cephalopod 2010-10-07 11:03:54

    +0

    非常感謝Arian ......但它沒有幫助。我試圖讓我的問題更有意義。看看我現在能否清楚解釋它。我不認爲你提供的解決方案將有助於我的情況。 – 2010-10-07 15:52:46

    1

    我不認爲具有共享集成測試模塊的2個戰爭模塊是非常常見的情況。

    但是,你可以通過Hudson得到這個工作。

    • 在Hudson中設置一個工作來部署您的父級pom,這將導致戰鬥模塊按照您當前的部署進行部署。
    • 在上一份工作成功後,觸發另一項工作來運行集成測試。

    您可能需要使用profiles激活集成測試,或者更具體地說,防止集成測試從第一份工作期間執行。

    我今年早些時候在大約一個小時內就建立了一個基本的Hudson服務器。
    哈德森有直接支持Maven的構建,也提供了一個位置,爲您的項目Maven的網站,包括所有的質量報告等
    您還可以配置Hudson來「看」你的供應鏈管理,並開始構建時,它標識承諾。

    +0

    謝謝crowne.I也在考慮遵循類似的方法。我使用巡航控制進行持續集成。我想知道是否構建Web戰爭並從自動化測試的構建文件(我們目前正在使用Ant)中部署它們是一個好主意,如果它是如何使用maven來完成的話。 – 2010-10-07 16:32:35