0

我正在尝试使用 Spring 框架并行运行 JUnit 5 测试。

我有一个单例 bean:需要在大约 4 个地方(POJO 类)注入的 WebDriver。然后一个测试类将注入其中一些 POJO 类来运行测试方法。因为其他测试将按照相同的模型,使用相同的 bean(webdriver) 运行,所以当测试结束时,bean 会话结束,并且另一个并行测试运行失败,因为 bean 已被销毁。

如何使每个测试方法共享单例 webdriver(而不是跨测试套件执行)所以每个测试会话都有一个不同的 webdriver bean?

我创建了一个尝试这样做的扩展:

public void interceptTestMethod(Invocation<Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable
    {
        ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();
        poolTaskExecutor.execute(()->
        {
            try
            {
                invocation.proceed();
            }
            catch (Throwable throwable)
            {
                throwable.printStackTrace();
            }
        });
        poolTaskExecutor.shutdown();
        poolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
    }

这会将每个测试放在线程池中,从而使测试线程安全(理论上)。但是 WebDriver bean 仍然在其他线程之间共享以用于其他测试方法。

我尝试制作 webdriver 原型,但是在一次运行 6 个测试时创建了太多的 bean,导致测试套件崩溃。

4

0 回答 0