2017-02-06 2 views
3

Мое приложение представляет собой многопоточную программу. Каждый поток будет выполнять набор тестовых примеров. Моя идея - создать новый экземпляр WebDriver для каждого потока и закрыть экземпляр, когда он закончится.Как повторно использовать существующие экземпляры WebDriver в многопоточности

Например: У меня есть 100 тестовых случаев, которые будут выполнены 10 потоками. Каждая нить принимает участие в 10 тестовых случаях.

На данный момент для каждого тестового примера открывается экземпляр браузера. Вместо этого для каждого потока необходимо открыть экземпляр браузера.

ответ

3

Создайте свои WebDriver экземпляры с помощью ThreadLocal. Цитирование JavaDoc по ThreadLocal:

Этот класс предоставляет локальные переменные потока. Эти переменные отличаются от их обычных аналогов тем, что каждый поток, который обращается к нему (посредством метода get или set), имеет свою собственную, независимо инициализированную копию переменной. Экземпляры ThreadLocal обычно представляют собой частные статические поля в классах, которые хотят связать состояние с потоком (например, идентификатор пользователя или идентификатор транзакции).

Пример использования:

// 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(); 
+0

Его работает, но я найти его трудно обрабатывать памяти браузера. Полезно, если вы предложите способ определить завершение каждого потока и после завершения отдельного выполнения потока, он должен закрыть связанный экземпляр браузера. И для каждого тестового случая мне нужно очистить память браузера, чтобы не добавлять текущие данные со старыми данными, которые находятся в памяти браузера. –

+0

(1) Вам, вероятно, потребуется подключиться к инфраструктуре тестирования, чтобы определить, когда все тесты будут завершены, а затем закройте драйверы. (2) Невозможно надежно. Если для каждого теста требуется чистый браузер, вы не можете обмениваться экземплярами. – qqilihq