как выполнить выполнение уровня тестовых данных в параллельном режиме для одного тестового примера - PullRequest
0 голосов
/ 06 января 2019

Я открываю несколько экземпляров браузера для каждого набора данных, но все входные данные вводятся только в одном экземпляре / сеансе вместо каждого набора данных в каждом экземпляре. Я использую селен и TestNG

@DataProvider(name="URLprovider", parallel=true )
private Object[][] getURLs() {
  return new Object[][] {
      {"Fist data"},
      {"Second Data"},
      {"3 data"}
  };
 }

 @Test(dataProvider="URLprovider",threadPoolSize = 3)
 public void testFun(String url){
    BaseDriver baseReference = BaseDriver.getBaseDriverInstance();      
  System.out.println("Test class"+url +"=" 
       +Thread.currentThread().getId());

    driver = baseReference.initBrowser();       
    driver.get("http://stackoverflow.com/"); 
driver.findElement(By.xpath("//*@id='search']/div/input")).sendKeys(url);

}

Итак, я открываю три экземпляра браузера параллельно (так как у нас есть 3 набора данных в @dataprovider) и вводим значение в текстовое поле. Но при выполнении кода 3 экземпляр открывается, но значение тестовых данных вводится только в одном экземпляре ... но я ожидаю, что в один экземпляр будут введены одни данные.

1 Ответ

0 голосов
/ 06 января 2019

Проблема заключается в вашем тестовом коде.

Тестовый код, которым вы поделились как часть testFun(), предполагает, что вы используете один и тот же WebDriver экземпляр среди всех ваших @Test итераций. Вы не показали нам, как выглядит BaseDriver baseReference = BaseDriver.getBaseDriverInstance();, но, исходя из вашей проблемы, я предполагаю, что он возвращает тот же экземпляр веб-драйвера.

Это объясняет, почему все ваши методы тестирования используют один и тот же экземпляр веб-драйвера.

Чтобы исправить эту проблему, вам необходимо выполнить одно из следующих действий:

  1. Переместите логику создания экземпляра веб-драйвера в ваш тестовый метод, т.е. testFun() (или)
  2. Создайте метод конфигурации @BeforeMethod, который будет отвечать за создание экземпляра браузера, и сохраняйте, что в экземпляре ThreadLocal<RemoteWebDriver> и вашем тестовом методе, то есть testFun() получает экземпляр веб-драйвера текущего потока через driver.get() [здесь Тип драйвера ThreadLocal<RemoteWebDriver>. Не забудьте объявить driver как статическую переменную.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...