我的应用程序是一个多线程程序。每个线程都将执行一组测试用例。我的想法是为每个线程创建一个新的WebDriver实例,并在完成时关闭它。
例如:我有100个测试用例,将由10个线程执行。每个线程都拥有10个测试用例的所有权。
截至目前,对于每个测试用例,都会打开一个浏览器实例。而不是那样,对于每个线程,需要打开浏览器实例。
答案 0 :(得分:3)
使用ThreadLocal
创建WebDriver
个实例。在ThreadLocal
上引用JavaDoc:
此类提供线程局部变量。这些变量与它们的正常对应物的不同之处在于,访问一个变量的每个线程(通过其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();