49

我们在 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> 
    ..... 
4

9 回答 9

46

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

mvn -D it.test=your.TestCase verify

有关更多信息,请参阅故障安全插件文档

于 2011-04-20T07:54:07.590 回答
29

Failsafe 文档会让您像这样指定测试:

mvn -Dit.test=BrokenIT verify

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

mvn -Dtest=WorksIT verify

我已经提交了一个错误EDIT:在 2.12 中被关闭为“无法复制”)以更正文档。

于 2011-07-26T20:21:54.803 回答
5

只需-DfailIfNoTests=false使用 testNG 为我添加作品。像这样的东西:

mvn integration-test -Dtest=aITest -DfailIfNoTests=false
于 2014-09-04T10:37:27.577 回答
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 配置文件和 with 调用 maven -DfailIfNoTests=false -Dtest=NameOfTest,它在常规“测试”阶段不运行任何常规测试,而NameOfTest在集成测试阶段只运行测试。

于 2010-11-19T19:40:53.640 回答
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

于 2009-05-24T05:47:41.120 回答
0

我自己也遇到了这个。像这样的东西对我很有效:

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

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

于 2013-03-30T00:48:33.957 回答
0

我正在使用:Apache Maven 3.6.3

openjdk version "11.0.2" 2019-01-15

<groupId>org.codehaus.mojo</groupId>
<artifactId>failsafe-maven-plugin</artifactId>
<version>2.4.3-alpha-1</version>

这个命令对我有用:

mvn failsafe:integration-test  -Dsurefire.skip=true -DskipIntegrationTests=false -DskipTests=false -Dtest=com.myxyz.func.ITestGate
于 2021-09-27T11:02:15.143 回答
0

这对我有用,当我在集成测试中只运行一种测试方法时

    mvn clean -Dit.test=some.package.SomeTestClass#testMethodName integration-test
于 2021-11-01T14:27:42.357 回答
0

通过回到实际文档的基础知识,实际上比上面的答案更简单。

运行 Junit 5 集成测试:

openjdk version "11.0.11" 2021-04-20
Apache Maven 3.6.3

在主构建中,只需放入记录的故障安全配置:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>3.0.0-M5</version>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

然后你可以只运行一个特定的集成测试:

mvn -Dtest=\*cs1_\* verify

请注意,此版本将在target文件夹中运行您的测试,如果您需要加载任何类似的外部文件,src\test\resources\x.y则将它们复制到target\test-classes\x.y

于 2021-10-16T07:06:16.727 回答