如何在多线程中重用现有的 WebDriver 实例



我的应用程序是一个多线程程序。每个线程将执行一组测试用例。我的想法是为每个线程创建一个新的 WebDriver 实例,并在完成后关闭实例。

例如:我有 100 个测试用例,将由 10 个线程执行。每个线程拥有 10 个测试用例的所有权。

截至目前,对于每个测试用例,都会打开一个浏览器实例。取而代之的是,对于每个线程,需要打开一个浏览器实例。

使用 ThreadLocal 创建WebDriver实例。引用 JavaDoc on ThreadLocal

此类提供线程局部变量。这些变量与普通对应变量的不同之处在于,访问一个变量的每个线程(通过其 get 或 set 方法(都有自己独立初始化的变量副本。ThreadLocal 实例通常是希望将状态与线程(例如,用户 ID 或事务 ID(相关联的类中的私有静态字段。

用法示例:

// for multiple separate test classes you need to share it among your project
public static final ThreadLocal<WebDriver> WEB_DRIVER_THREAD_LOCAL = 
    new ThreadLocal<WebDriver>() {
        @Override
        protected WebDriver initialValue() {
            // create a new instance for each thread
            return new ChromeDriver();
        }
    };
// get a WebDriver instance in your tests;
// when there is already an instance for the current Thread, it is returned;
// elsewise a new instance is created
WebDriver webDriver = WEB_DRIVER_THREAD_LOCAL.get();

最新更新