簡體   English   中英

多線程TestNG DataProvider執行

[英]Multithreaded TestNG DataProvider Execution

我正在嘗試通過TestNG進行多線程測試。 @BeforeMethod實例化測試的WebDrivers @AfterMethod在測試后關閉WebDrivers。 @Dataprovider為測試提供數據以使其在循環中多次運行

 import java.lang.reflect.Method;

 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.chrome.ChromeDriver;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.AfterSuite;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;

 public class MultipleSession {
     private WebDriver driver;

     @BeforeMethod
     public void beforeMethod() {
         System.err.println("Before ID" + Thread.currentThread().getId());
         System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
         if (driver == null) {
             driver = new ChromeDriver();

             driver.get("https://www.google.co.in/");
         }

     }

     @DataProvider(name = "sessionDataProvider", parallel = true)
     public static Object[][] sessionDataProvider(Method method) {
         int len = 12;

         Object[][] parameters = new Object[len][1];
         for (int i = 0; i < len; i++) {
             parameters[i][0] = i;

         }
         return parameters;
     }

     @Test(dataProvider = "sessionDataProvider")
     public void executSessionOne(int input) {
         System.err.println("Test ID" + Thread.currentThread().getId());



         driver.findElement(By.name("q")).sendKeys(input + "");
         try {
             Thread.sleep(5000);
         } catch (InterruptedException e) {

             e.printStackTrace();
         }

     }

     @AfterMethod
     public void afterMethod() {
         System.err.println("After ID" + Thread.currentThread().getId());
     }

     @AfterSuite
     public void afterSuti() {
         driver.close();
         driver.quit();
     }
  }

我的問題是,即使TestNG一次打開10個瀏覽器,任務也只能由一個瀏覽器執行,而其他9個瀏覽器則什么也不做。 如何將beforeMethod中聲明的Webdriver實例分發到所有線程?

提前致謝。

private WebDriver driver;

這行表示只有一個webdriver實例, driver = new ChromeDriver(); 一次又一次實例化同一驅動程序對象。

要解決此問題,請創建工廠並在每個@Test方法中向工廠詢問驅動程序對象。工廠的示例代碼將類似於

static synchronized RemoteWebDriver getDriver()
{
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
         if (driver == null) {
             driver = new ChromeDriver()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM