我有一个maven项目和几个测试类。
我希望使用插件surefire以特定顺序运行这些测试。
例如,我有:
我想要运行Class 1,然后运行2,然后运行3,最后运行4.
如何在pom.xml中指定它?
答案 0 :(得分:4)
一种解决方法是将runOrder
参数设置为按字母顺序排列,然后将测试重命名为按字母顺序排列。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<runOrder>alphabetical</runOrder>
</configuration>
</plugin>
不推荐这样做 - 单元测试应该相互独立。执行顺序无关紧要。
答案 1 :(得分:2)
您可以使用runOrder
参数执行此操作。
来自文档:
定义测试运行的顺序。支持的值是 “按字母顺序”,“反向字母”,“随机”,“每小时” (按字母顺序排列均匀,在奇数小时内按字母顺序排列), “失败第一”,“平衡”和“文件系统”。
请参阅完整说明here。
这是一个例子
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<runOrder>alphabetical</runOrder>
</configuration>
</plugin>
答案 2 :(得分: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>
答案 3 :(得分: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());
}
}
您是否需要按特定顺序执行这些操作?理想情况下,测试不应相互依赖。
答案 4 :(得分:0)
您可以使用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 {
}