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

我有一个maven项目和几个测试类。

我希望使用插件surefire以特定顺序运行这些测试。

例如,我有:

  • ClassTest1.java
  • ClassTest2.java
  • ClassTest3.java
  • ClassTest4.java

我想运行Class 1,然后是2,然后是3,最后是4。

如何在pom.xml中指定它?

一种解决方法是将runOrder参数设置为按字母顺序排列,然后将测试重命名为按字母顺序排列。

  org.apache.maven.plugins maven-surefire-plugin  alphabetical   

不建议这样做 – unit testing应该相互独立。 执行顺序无关紧要。

您可以使用runOrder参数执行此runOrder

从文档:

定义测试运行的顺序。支持的值是“按字母顺序”,“反向字母”,“随机”,“每小时”(偶数小时按字母顺序排列,奇数小时反向按字母顺序排列),“失败第一”,“平衡”和“文件系统”。

请参阅此处的完整说明。

这是一个例子

  org.apache.maven.plugins maven-surefire-plugin 2.17  alphabetical   

我建议你在testng.xml中定义顺序,然后通过maven创建配置文件并运行它。 这是您可以尝试的代码示例:

            

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

  any id  org.apache.maven.plugins maven-surefire-plugin 2.12.4   src/test/resources/testng.xml     

您可以使用JUnitCore以特定顺序执行测试。 这是一个基本的实现。

 public static void main(String[] args) { List testCases = new ArrayList(); //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()); } } 

您是否需要按特定顺序执行它们? 理想情况下,测试不应相互依赖。

您可以使用junit创建一个testsuite类,然后使用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 { }