如何按特定顺序运行Maven测试?

6
我有一个maven项目和几个测试类。
我想使用surefire插件按特定顺序运行这些测试。
例如,我有:
ClassTest1.java
ClassTest2.java
ClassTest3.java
ClassTest4.java
我希望按照1、2、3、4的顺序运行这些测试。
如何在pom.xml中指定这个顺序呢?

除了已经给出的所有答案之外,您还可以查看TestNG,它支持一些测试排序。 - SiKing
5个回答

8

一种解决方法是将runOrder参数设置为按字母顺序,并将您的测试重命名为按字母顺序。

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

不过这并不是推荐的做法 - 单元测试应该互相独立。执行顺序不应该影响结果。


非常感谢您的帮助!!我很感激 :) - Kazman
如果我为每个方法设置了优先级,例如priority=0、1、2。在这种情况下,它会随机运行类。即使我已将类重命名为TC_000、TC_001、TC_002等。每个类-方法都以priority=0开头,依此类推。 - avidCoder

2
我建议您先在testng.xml中定义顺序,然后通过maven创建配置文件并运行。以下是一个可供尝试的代码示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium Automation" parallel="false">
    <test name="Test1">
        <classes>
            <class name="some.package.Class1"/>
            <class name="some.package.Class2"/>
            <class name="some.package.Class3"/>
        </classes>
    </test>
</suite>

然后在 POM.xml 中,您可以创建以下配置文件,并引用要执行的 testNG.xml。

<profile>
    <id>any id</id>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>
        <configuration>
            <suiteXmlFiles>
                <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
            </suiteXmlFiles>
        </configuration>
    </plugin/>
</profile>

2
您可以使用 runOrder 参数来实现此操作。
根据文档:

定义测试运行的顺序。支持的值为“alphabetical”(按字母顺序),“reversealphabetical”(按字母相反的顺序),“random”(随机),“hourly”(每小时按字母顺序,奇数小时按字母相反的顺序),“failedfirst”(先运行失败的测试),“balanced”(平衡运行测试),和“filesystem”(按文件系统顺序)。

请参见此处的完整描述。
以下是一个示例。
<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.17</version>
      <configuration>
        <runOrder>alphabetical</runOrder>
    </configuration>
</plugin>

我该如何在命令行中使用它?mvn test -Drunorder=alphabetical:这样正确吗? - biligunb
@biligunb 不是的。应该是 mvn test -Dsurefire.runOrder=alphabetical,参考链接:https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#runOrder - Instein

0
你可以使用 JUnitCore 来按特定顺序执行测试。以下是一个基本实现。
public static void main(String[] args)
{
    List<Class> testCases = new ArrayList<Class>();

    //Add test cases
    testCases.add(Class1.class);
    testCases.add(Class2.class);
    for (Class testCase : testCases)
           {
                runTestCase(testCase);
           }
}

private static void runTestCase(Class testCase)
{
    Result result = JUnitCore.runClasses(testCase);
    for (Failure failure : result.getFailures())
    {
        System.out.println(failure.toString());
    }
}

你需要按特定顺序执行它们的原因是什么?理想情况下,测试不应该相互依赖。


0
你可以使用JUnit创建一个测试套件类,然后使用Surefire来运行这个类,它将按照你给定的顺序运行,例如:
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(Suite.class) 
@SuiteClasses({ 
Test1.class
Test2.class
Test3.class
Test4.class
}) 

public class TestSuite { 

} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接