我的应用程序是一个多线程程序。每个线程将执行一组测试用例。我的想法是为每个线程创建一个新的 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();