【问题标题】:How to run individual test in the integration-test target in maven如何在 maven 的集成测试目标中运行单个测试
【发布时间】:2010-10-28 00:59:27
【问题描述】:

我们在 Maven 中为集成测试阶段生命周期定义了数百个测试,它们需要很长时间才能完成。

我想做的只是在integration-test 中运行一项测试。我试着做:

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

但这不起作用。 -Dtest 只运行单元测试目标中的测试,而不是集成测试阶段。我尝试了-Dintegration-test=&lt;my-test&gt;,但被忽略了。

有没有办法做到这一点?


我的配置是:

<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> 
    ..... 

【问题讨论】:

  • 我刚刚在我的项目中完成了这项工作,并且成功了。你有没有机会从 pom 中发布 surefire 插件部分?
  • org.apache.maven.pluginsmaven-surefire-pluginsurefire-it integration-testtestnone**/api/** .....
  • 由于限制,我无法发布完整的内容。但这就是它的要点。
  • 您可以作为问题的一部分发布。如果您删除排除和包含部分会发生什么,只是出于兴趣。除此之外你的配置和我的一样

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


【解决方案1】:

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

mvn -Dit.test=your.TestCase verify

the failsafe plugin docs for more info

【讨论】:

  • 这在 2013 年 7 月 26 日对我有用,插件版本为 2.15 和 Maven 3.1.0,尽管其他答案是这样说的。另一个答案似乎是一个错误。
  • 已针对 mvn 3.2.5、插件 2.18 验证。运行一个集成测试: mvn integration-test -Dit.test=MyClassIT 但是,这也运行单元测试: mvn verify -Dit.test=MyClassIT
  • 请注意,这可能仍会运行单元测试。要关闭单元测试的执行,请添加-Dtest=foo -DfailIfNoTests=false(假设 foo 不存在),请参阅stackoverflow.com/questions/6612344/…
【解决方案2】:

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

mvn -Dit.test=BrokenIT verify

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

mvn -Dtest=WorksIT verify

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

【讨论】:

  • 无法触发构建测试环境的build-helper-maven-plugin。
  • @okwap 这听起来像是您的项目和插件设置所特有的,而不是故障安全/集成测试问题。
  • 5 年后...我遇到了类似的问题 -Dit.test,或者任何带有点的参数都不起作用。通过 cmd 而不是 powershell 运行命令为我修复了它。
【解决方案3】:

只需添加 -DfailIfNoTests=false 即可使用 testNG 为我工作。像这样的:

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

【讨论】:

    【解决方案4】:

    我为此苦苦挣扎,并创建了一个额外的配置文件,以便在我只想运行一个集成测试时使用。我希望我在这里成功提取了正确的部分:

        <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 测试阶段。

    【讨论】:

      【解决方案5】:

      我不确定 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

      【讨论】:

      • 我同意詹姆斯的观点。 TestNG 适合这种情况,但我认为最好使用 TestNG 组:@Test(groups = { "slow_test" }) 然后在您的 TestNG 套件中: 然后你总是可以包含/排除特定的组
      【解决方案6】:

      我自己也遇到了。这样的事情对我很有效:

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

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

      【讨论】:

        【解决方案7】:

        我正在使用: 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
        

        【讨论】:

          【解决方案8】:

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

          运行 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

          【讨论】:

            【解决方案9】:

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

                mvn clean -Dit.test=some.package.SomeTestClass#testMethodName integration-test
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-02-21
              • 2012-05-05
              • 2018-07-12
              • 1970-01-01
              • 1970-01-01
              • 2023-01-09
              • 2011-12-11
              相关资源
              最近更新 更多