2014-09-30 55 views
0

我的Java項目中有一個模塊,具有多個集成測試。其中兩個是UpgradeDatabase.java和CreateDatabase.java,它們在預集成階段的每次運行中都會執行。 我想安排這些只在一段時間內運行一次(比方說每月),因爲它們執行時間太長(很多數據庫創建等),我該如何實現這一目標? 我的故障安全插件配置看起來是這樣的(注意,該skip.selenium.tests參數爲false):Maven集成測試的有條件運行

<plugin> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <configuration> 
       <forkMode>${tests.forkMode}</forkMode> 
       <skip>${skip.selenium.tests}</skip> 
       <environmentVariables> 
        ...this area skipped...as it's non important 
       </environmentVariables> 
       <systemPropertyVariables> 
        <!--<rc.count.firefox>${rc.count.firefox}</rc.count.firefox>--> 
        <selenium.browser>firefox</selenium.browser> 
        <user.home>${env.USERPROFILE}</user.home> 
       </systemPropertyVariables> 
      </configuration> 

      <executions> 
       <!--before the tests--> 
       <execution> 
        <id>upgrade-the-database</id> 
        <configuration> 
         <includes> 
          <include>**/UpgradeDatabase.java</include> 
         </includes> 
        </configuration> 
        <phase>pre-integration-test</phase> 
        <goals> 
         <goal>integration-test</goal> 
         <goal>verify</goal> 
        </goals> 
       </execution> 
       <!--before the tests--> 
       <execution> 
        <id>recreate-the-database</id> 
        <configuration> 
         <testFailureIgnore>false</testFailureIgnore> 
         <includes> 
          <include>**/CreateDatabase.java</include> 
         </includes> 
        </configuration> 
        <phase>pre-integration-test</phase> 
        <goals> 
         <goal>integration-test</goal> 
         <goal>verify</goal> 
        </goals> 
       </execution> 

      </executions> 
     </plugin> 
+0

您使用的是JUnit還是TestNG? – luboskrnac 2014-09-30 14:45:07

+0

我正在使用JUnit – misha 2014-10-02 12:42:18

回答

0

如果使用TestNG的,我會建議通過測試組來處理這個問題。

您可以爲每個測試指定測試屬於哪個/哪些組(例如@Test(groups = { "SlowIntegrationTest" }))。與運行maven時相比,您可以指定要執行的組(例如clean test -Dgroups=UnitTest,IntegrationTest)。

當然這涉及到開發人員的紀律以便正確標記測試。 但是,如果有人忘記標記測試,它將不會被執行,它應該出現在特定模塊的覆蓋率統計中(這歸結於您的CI過程的質量)。

1

看看Build Profiles

總之。與附上您的配置:

<profiles> 
    <profile> 
    <id>monthly</id> 

     ... your configuration ... 

    </profile> 
</profiles> 

將它添加到您的settings.xml,如果你希望它在默認情況下被激活:

<activeProfiles> 
    <activeProfile>monthly</activeProfile> 
</activeProfiles> 

或激活它的CMD線:

mvn -P monthly ... 
+0

Gerold,我沒有在這裏找到你的解決方案。 首先,你想要的是什麼settings.xml? 是%USER_HOME%/。m2/settings.xml或%M2_HOME%/ conf/settings.xml – misha 2014-10-02 12:51:20

+0

@misha您是否閱讀過我鏈接到的_complete_章節? Re'settings.xml':如果你想通過cmd行激活配置文件,你不需要'settings.xml'中的這個設置。這是一個額外的信息,以防萬一...如果你想使用它,這取決於你是否希望配置可用於所有或只是特定用戶在計算機上,請參閱[Maven,設置參考,快速瀏覽](https://maven.apache.org/settings.html):_「如果兩個文件都存在,它們的內容會被合併,而用戶特定的settings.xml佔據主導地位。」_ – 2014-10-02 13:38:25

+0

但是我只有一個在我的CI環境中構建配置,因此我仍然必須手動激活/禁用配置文件,以便使用新的數據庫設置我的環境。我真正需要的是完全自動化,也許使用一些腳本來檢查一個月的第一天並觸發另一個配置文件的執行(其中包括我的UpgradeDatabase.java和CreateDatabase.java測試) – misha 2014-10-02 14:12:58

0

你可以將數據庫設置/升級代碼移動到new module。然後,您可以使用build profiles將這個新模塊隱藏在標準構建中(即,當您調用沒有配置文件的Maven時)。在您的CI服務器上,您可以使用-P name偶爾運行Maven(可能每晚),以啓用應該包含新模塊的配置文件name

請注意,Maven會按照您指定的順序執行模塊,除非它們彼此依賴。在第二種情況下,Maven會重新排序模塊,以確保首先構建依賴關係。

+0

僅僅因爲我很好奇:爲什麼你建議遷移到新模塊?如果我沒有激活一個配置文件,無論配置文件所在的位置如何,它的配置都不會激活。 – 2014-09-30 15:19:00

+0

這只是另一種選擇。當插件的配置很複雜時(比如保持XML簡單),或者當我想分離那些根本不屬於同一模塊的東西(比如單元測試和集成測試)時,我更喜歡使用模塊。 – 2014-10-01 08:15:07

0

@misha重新您的評論對my previous answer

  1. 純外部的Maven輪廓激活:

    使常規構建工作參數與參數PROFILE,例如,和一個空參數值(或只是空格字符,如果不支持空值)作爲默認值。這個參數添加到您的MVN CMD行:

    mvn ${PROFILE} ...

    這樣,一個空的(或空間)值被添加到您的CMD線做什麼都沒有。

    創建觸發規則並注入此參數的-P月值,讓你的常規構建的CMD線變爲每月構建工作:

    mvn -P monthly ...
  2. 混合外部和POM內部的Maven配置文件激活:

    請參閱5.3. Profile ActivationIntroduction to Build Profiles, Details on profile activation

    添加激活部分您的個人資料,如:

    <activation> 
        <property> 
        <name>monthly</name> 
        </property> 
    </activation>

    ...並用適當的財產提供您經常構建的MVN CMD線:

    mvn -D monthly ...

    ...使用例如,上面的方法。

+0

我創建了一個覆蓋故障安全插件並執行初始化測試的配置文件,但在TeamCity中,我無法根據每月計劃激活該配置文件,即我可以觸發每月構建,但無法注入該參數-P月。請注意,我正在使用TeamCity 8.1.3 – misha 2014-10-06 09:01:52

+0

@misha對不起。我對TeamCity不熟悉。我認爲這值得一個新的問題。 – 2014-10-09 10:32:24

相關問題