如何按特定顺序运行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 { }