我最近开始将我的JUnit测试分组到测试套件中。到目前为止,这对我来说非常有用。我遇到的唯一抱怨是@SuiteClasses
注释的顺序决定了测试执行的顺序。我知道这是它的预期方式,但我只想使用测试套件对测试进行分组,而不是对它们进行排序。
由于我们在自动化,功能(Selenium)测试环境中使用这些测试,因此我不希望测试始终以相同的顺序执行。有谁知道如何仅将测试套件用于其分组功能?
提前致谢!
我已在下面添加了我的代码:
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class, Test3.class})
public class TestSuite {
private static ScreenRecorder screenRecorder;
@BeforeClass
public static void setUp() {
screenRecorder = new ScreenRecorder(1, Data.SCREENSHOT_DIR);
screenRecorder.startRecording(TestSuite.class.getCanonicalName());
}
@AfterClass
public static void tearDown() throws InterruptedException, CommandException {
screenRecorder.stopRecording();
}
}
答案 0 :(得分:0)
您需要为所有测试用例使用特定的JUnit运行器。
这是我前一段时间写的:
public class RandomTestRunner extends BlockJUnit4ClassRunner {
public RandomTestRunner(Class<?> clazz) throws InitializationError {
super(clazz);
}
@Override
protected List<FrameworkMethod> computeTestMethods() {
List<FrameworkMethod> methods = super.computeTestMethods();
List<FrameworkMethod> newMethods = new ArrayList<>(methods);
Collections.shuffle(newMethods);
return newMethods;
}
}
然后,您需要将@RunWith(RandomTestRunner.class)
注释添加到您想要真正随机运行的所有测试用例类中,因此在您的情况下Test1
,Test2
和Test3
套件的顺序仍然相同:Test1
然后Test2
然后Test3
,这些类中的测试只会是随机的。