Java 如何以特定的顺序运行maven测试?

Java 如何以特定的顺序运行maven测试?,java,maven,testing,testng,pom.xml,Java,Maven,Testing,Testng,Pom.xml,我创建了Maven项目,其结构如下: src/main/java src/main/resources src/test/java src/test/resources 我将TestNG测试保存在src/test/java文件夹中。假设在这个文件夹中,我有三个类: 胡说八道 谷歌测试 推特测试 而且每一个都有一些TestNG测试方法 当我在命令提示符下点击mvn clean test时,我观察到测试按以下顺序运行: 谷歌测试 从twitter测试 来自YahooTest的测试 谷歌测试 从tw

我创建了Maven项目,其结构如下:

src/main/java
src/main/resources
src/test/java
src/test/resources
我将TestNG测试保存在
src/test/java
文件夹中。假设在这个文件夹中,我有三个类:

  • 胡说八道
  • 谷歌测试
  • 推特测试
  • 而且每一个都有一些TestNG测试方法

    当我在命令提示符下点击
    mvn clean test
    时,我观察到测试按以下顺序运行:

  • 谷歌测试
  • 从twitter测试
  • 来自YahooTest的测试
  • 谷歌测试
  • 从twitter测试
  • 来自YahooTest的测试
  • 谷歌测试
  • 从twitter测试
  • 来自YahooTest的测试
  • 表示第一个类按字母顺序排列,即GoogleTest、TwitterTest、YahooTest,然后执行每个类的一个测试,再次执行每个类的一个测试。这将持续到所有测试方法执行完成

    但是我想定制测试执行

    我如何实现以下目标:

    src/main/java
    src/main/resources
    src/test/java
    src/test/resources
    
  • 按照我想要的顺序而不是字母顺序安排测试类的测试执行
  • 不是从每个测试类执行一个测试方法,然后从每个测试类执行一个测试方法…,而是从同一个类执行所有测试用例,然后移动到另一个测试类
  • 想想这个。可以使用以下代码指定runOrder

    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <runOrder>alphabetical</runOrder>
    </configuration>
    
    
    org.apache.maven.plugins
    maven surefire插件
    按字母顺序排列的
    
    在pom.xml中,也要考虑这一点

    在TestNG中,使用dependsOnMethods和/或dependsonGroup:

    @Test(groups = "a")
    public void f1() {}
    
    @Test(groups = "a")
    public void f2() {}
    
    @Test(dependsOnGroups = "a")
    public void g() {}
    

    在这种情况下,g()将仅在f1()和f2()完成并成功后运行。

    testng按字母顺序排序。一种方法是使用suite.xml,从中可以自定义您喜欢的任何跑步方式

    下面的代码将按字母顺序运行所有的类,但一个接一个

      <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    
    <suite name="Suite1" verbose="1" >
    
      <test name="Check" preserve-order="true"> //This is true by default
          <packages>
              <package name="testngtests.mytests"></package>
          </packages>
    
      </test>
    
    </suite>
    
    
    //这在默认情况下是正确的
    
    如果您希望有一个特定的类执行顺序,那么不要指定packages标记,而是使用classes标记并按照您希望它们运行的顺序放置类名

    <suite name="TmpSuite" >
      <test name="TmpTest" >
        <classes>
          <class name="YahooTest"  />
          <class name="GoogleTest"  />
        <classes>
        </test>
    </suite>
    
    
    

    您需要在surefire插件配置部分指定此xml-请参阅使用suitexml文件部分

    Niharika,非常感谢您提供此详细信息!!!这些课程是按字母顺序运行的,但不是像我期望的那样一个接一个地运行。相反,测试是按以下顺序运行的:
    第一个类的第一个测试,第二个类的第一个测试,…,第一个类的第二个测试,第二个类的第二个测试…
    您是否在某个地方设置了并行属性?不,我在testng.xml文件的任何地方都没有提到并行属性。那么这是不可能的。您使用的testng版本是什么?对我来说,它在6.8.8上运行良好。首先执行整个类,然后执行第二个类。非常感谢!!!:)