如何在maven中的集成测试目标中运行单个测试

时间:2009-05-21 19:39:27

标签: maven-2 integration-testing maven-surefire-plugin

我们为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> 
    ..... 

6 个答案:

答案 0 :(得分:32)

如果您使用的是Maven failsafe plugin,则可以通过将it.test属性设置为完全限定的测试类名来运行单个集成测试:

mvn -Dit.test=your.TestCase verify

请参阅the failsafe plugin docs for more info

答案 1 :(得分:25)

Failsafe documentation可以指定测试:

mvn -Dit.test=BrokenIT verify

但是, -Dit.test 似乎不再起作用了。相反,用于指定Surefire测试的相同参数显然也适用于Failsafe。例如:

mvn -Dtest=WorksIT verify

我已经提交了bug编辑:,已在2.12中关闭为“无法重现”)以更正文档。

答案 2 :(得分:3)

只需为testNG添加-DfailIfNoTests=false即可。像这样:

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

答案 3 :(得分: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调用maven,并且它在常规“测试”阶段不运行任何常规测试,并且在期间仅运行NameOfTest测试整合测试阶段。

答案 4 :(得分: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

答案 5 :(得分:0)

我自己也碰到了这个。这样的事情对我很有用:

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

诀窍是确保在-Dtest部分之前提到测试组。