2009-05-21 146 views
31

我們爲maven中的集成測試階段生命週期定義了數百個測試,並且需要很長時間才能完成。如何在maven中的集成測試目標中運行單個測試

我想要做的只是在integration-test中運行一個測試。我試過了:

mvn -Dtest=<my-test> integration-test 

但這不起作用。 -Dtest僅在單元測試目標中運行測試,而不是集成測試階段。我嘗試了-Dintegration-test=<my-test>,而忽略了這一點。

有沒有辦法做到這一點?


我的配置是:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>surefire-it</id> 
      <phase>integration-test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      <configuration> 
       <excludes> 
        <exclude>none</exclude> 
       </excludes> 
       <includes> 
        <include>**/api/**</include> 
       </includes> 
    ..... 
+0

我剛剛在我的項目上完成了這項工作,並且工作正常。任何機會你可以發佈pom的surefire pluging部分? – 2009-05-21 19:55:08

+0

org.apache.maven.plugins 行家-萬無一失-插件 萬無一失-它 集成測試 測試 <結構> 沒有 **/API/** ..... – Jalpesh 2009-05-21 20:21:30

+0

我不能發佈在充分的機會,因爲限制。但這是它的要點。 – Jalpesh 2009-05-21 20:22:25

回答

2

我不知道有關JUnit的,但對於TestNG的策略將是確定只有一個測試套件的XML文件,然後在你的POM配置surefire插件只運行它。在你的POM,你會有這樣的事情(免責聲明,這是未經測試):

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>integration-test</phase> 
     <configuration> 
      <suiteXmlFiles> 
      <suiteXmlFile>single-test.xml</suiteXmlFile> 
      </suiteXmlFiles> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

要配置一套文件,請參閱http://testng.org/doc/documentation-main.html

3

我通過這個掙扎,我創建了一個額外的配置文件以使用當時我只想運行一個集成測試。我希望,我已經成功地提取只是在這裏的右側部分:

<profile> 
     <id>integrationTestSingle</id> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>surefire-it</id> 
          <phase>integration-test</phase> 
          <goals> 
           <goal>test</goal> 
          </goals> 
          <configuration> 
           <includes> 
            <include>**/integration/**/${test}.java</include> 
           </includes> 
           <skipTests>false</skipTests> 
          </configuration> 
         </execution> 
        </executions> 
        <configuration> 
         <argLine>-Xms256M -Xmx768M -XX:MaxPermSize=256M</argLine> 
        </configuration> 
       </plugin> 

       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>default-test</id>         
          <configuration> 
           <skipTests>true</skipTests> 
          </configuration> 
         </execution> 
        </executions> 

       </plugin> 
      </plugins> 
     </build> 
    </profile> 

現在,我稱之爲行家與integrationTestSingle輪廓,並與-DfailIfNoTests=false -Dtest=NameOfTest,並定期「測試期間不運行任何常規測試「階段,並且在整合測試階段僅運行NameOfTest測試。

21

Failsafe documentation會對您指定的測試,像這樣:

mvn -Dit.test=BrokenIT verify 

然而,-Dit.test似乎沒有任何工作更長的時間。相反,用於指定Surefire測試的相同參數顯然也適用於Failsafe。例如:

mvn -Dtest=WorksIT verify 

我已經提交了bug編輯:將其如在2.12「無法重現」關閉)糾正的文件。

0

剛剛碰到了這個自己。像這樣的工作很適合我:

mvn -Pintegration-test -Dtest=<my-test> 

訣竅是,以確保測試組的-Dtest部分之前提到的。

2

只是加上-DfailIfNoTests=false適合我testNG。就像這樣:

mvn integration-test -Dtest=aITest -DfailIfNoTests=false