与How can I make my JUnit tests run in random order?类似,我希望TestNG以随机顺序运行我的测试,因此无意识的依赖关系无法进入。
默认情况下,TestNG将运行testng.xml文件中的测试 随机顺序。
但是,我创建了一个小型测试项目,其中包含一个简单的testng.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="My suite">
<test name="Simple test">
<packages>
<package name="testngtests"></package>
</packages>
</test>
</suite>
包testngtests
包含两个测试类(MyTest1,MyTest2),它们包含一些空方法,如下所示:
@Test
public void testOne(){
}
测试方法都是空的,只是名称不同。
当我运行它们(使用Eclipse TestNG运行程序或在命令行上)时,测试按照相同的顺序运行(即按字母顺序排序,首先按类排序,然后按方法名称排序)。
文档错误吗?
或“按随机顺序”只是表示“没有保证订单”?那么我如何让TestNG主动随机化测试顺序呢?
答案 0 :(得分:5)
是的,“随机”应该是“不可预测的”。
如果你想要真正的随机化,请查找IMethodInterceptor,其中TestNG将为您提供将订购更改为您喜欢的任何内容的机会。
答案 1 :(得分:4)
要展开Cedric Beust's answer,请在this example from GitHub的帮助下找到执行此操作的代码:
import org.testng.IMethodInstance;
import org.testng.IMethodInterceptor;
import org.testng.ITestContext;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class TestOrderRandomizer implements IMethodInterceptor {
@Override
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
long seed = System.nanoTime();
System.out.println(String.format("Randomizing order of tests with seed: %s", seed));
Collections.shuffle(methods, new Random(seed));
return methods;
}
}
要使用它,请在测试类之前添加:
import org.testng.annotations.Listeners;
@Listeners(TestOrderRandomizer.class)
public class TesterClass {
...
打印种子可以通过再次种植相同的种子来重现运行顺序。