如何按特定顺序运行 Maven 测试? [复制]
Posted
技术标签:
【中文标题】如何按特定顺序运行 Maven 测试? [复制]【英文标题】:How to run maven tests in a specific order? [duplicate] 【发布时间】:2014-08-06 19:26:43 【问题描述】:我有一个 Maven 项目和几个测试类。
我想使用插件surefire 以特定顺序运行这些测试。
例如,我有:
ClassTest1.java ClassTest2.java ClassTest3.java ClassTest4.java我想运行 Class 1,然后是 2,然后是 3,最后是 4。
如何在 pom.xml 中指定它?
【问题讨论】:
除了已经给出的所有答案,您还可以看看 TestNG,它支持一些测试排序。 【参考方案1】:一种解决方法是将runOrder
参数设置为按字母顺序排列,然后将您的测试重命名为按字母顺序排列。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<runOrder>alphabetical</runOrder>
</configuration>
</plugin>
但不建议这样做 - 单元测试应该相互独立。执行顺序应该无关紧要。
【讨论】:
非常感谢您的帮助!!我很感激:) 如果我为每个方法设置了优先级,如优先级 = 0、1、2。在这种情况下,它会随机运行类。即使我已经像这样将类重命名为 TC_000、TC_001、TC_002。并且每个类 - 方法都以 priority=0 开头,依此类推。【参考方案2】:您可以使用runOrder
参数执行此操作。
来自文档:
定义运行测试的顺序。支持的值为 “按字母顺序排列”、“按字母顺序排列”、“随机”、“每小时” (偶数小时按字母顺序排列,奇数小时按字母倒序排列), “failedfirst”、“balanced”和“filesystem”。
查看完整描述here。
这是一个例子
<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 : is this correct?
【参考方案3】:
我建议您在 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>
【讨论】:
【参考方案4】:您可以使用 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());
您是否有理由要求它们按特定顺序执行?理想情况下,测试不应相互依赖。
【讨论】:
【参考方案5】:你可以用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
【讨论】:
以上是关于如何按特定顺序运行 Maven 测试? [复制]的主要内容,如果未能解决你的问题,请参考以下文章