以随机顺序运行JUnit SuiteClasses

时间:2016-01-11 08:46:30

标签: java junit automated-tests functional-testing

我最近开始将我的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();
}

}

1 个答案:

答案 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)注释添加到您想要真正随机运行的所有测试用例类中,因此在您的情况下Test1Test2Test3

套件的顺序仍然相同:Test1然后Test2然后Test3,这些类中的测试只会是随机的。