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

时间:2014-11-11 07:19:28

标签: java maven testing testng pom.xml

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

src/main/java
src/main/resources
src/test/java
src/test/resources

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

  1. YahooTest
  2. GoogleTest
  3. TwitterTest
  4. 并且每个人都有很少的TestNG测试方法。

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

    1. 来自GoogleTest的测试
    2. 来自TwitterTest的测试
    3. 来自YahooTest的测试
    4. 来自GoogleTest的测试
    5. 来自TwitterTest的测试
    6. 来自YahooTest的测试
    7. 来自GoogleTest的测试
    8. 来自TwitterTest的测试
    9. 来自YahooTest的测试
    10. 意味着第一个类按字母顺序排序,即GoogleTest,TwitterTest,YahooTest,然后执行每个类的一个测试,并再次执行每个类的一个测试。这将继续,直到所有测试方法执行完成。

      但我想自定义测试执行。

      我如何实现以下目标:

      1. 按照我想要的顺序而不是按字母顺序排列测试类的测试执行
      2. 不是从每个测试类执行一个测试方法,而是从每个测试类执行一个测试方法......,从同一个类执行所有测试用例,然后转移到另一个测试类

3 个答案:

答案 0 :(得分:1)

同样考虑这个link

在TestNG中,您使用dependsOnMethods和/或dependsOnGroups:

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

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

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

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

答案 1 :(得分:0)

考虑这个link。您可以使用以下代码

指定runOrder
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
    <runOrder>alphabetical</runOrder>
</configuration>

在你的pom.xml中

答案 2 :(得分:0)

字母顺序是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>

如果你想要一个特定的类执行顺序,那么不要指定包标签,而是使用classes标签,并按照你希望它们运行的​​顺序放置类名。

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

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