2009-05-21 93 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 
相关问题