如何在多个并行线程中运行单个testng测试用例

时间:2018-08-18 12:09:57

标签: java selenium testng

我想在任何浏览器中多次并行运行单个测试NG测试用例

1 个答案:

答案 0 :(得分:0)

A.1。要多次运行测试用例,请在@Test批注中使用invocationCount属性。此invocationCount确定TestNG应运行此测试方法多少次。

@Test(invocationCount = ?)

A.2。要在不同的线程中多次运行测试用例,请使用@Test批注中的threadPoolSize属性。此属性告诉TestNG创建线程池以通过多个线程运行测试方法

@Test(invocationCount = ?, threadPoolSize = ?)

B.3。要在不同线程的多个浏览器中运行测试用例,请将webDriver初始化为ThreadLocal

private static ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();

在testng.xml中,以浏览器名称作为参数创建测试

<test name="Test">
    <parameter name="browserName" value="firefox"></parameter>
    <classes>
        <class name="MyTestCases" />
    </classes>
</test>

<test name="Test">
    <parameter name="browserName" value="Chrome"></parameter>
    <classes>
        <class name="MyTestCases" />
    </classes>
</test>

使用@Parameters()获取浏览器名称的值

@BeforeTest
@Parameters("browserName")
public void webDriverHandler(String browserName){
  // String browserName contains parameter value
}

创建一个驱动程序处理程序和一个testbase类。使用驱动程序处理程序设置和获取webDriver,并使用您的基类获取浏览器名称

驱动程序处理程序:

public class DriverHandler {

private static ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();

public static WebDriver getDriver() {
    return webDriver.get();
}

public static void setWebDriver(String browser) {

     WebDriver driver = null;

     if (browser.contains("firefox")) {

       driver = new FirefoxDriver();

    } else if (browser.contains("chrome")) {

       ChromeOptions options = new ChromeOptions();
       driver = new ChromeDriver(options);  

    }
    webDriver.set(driver);
}


}

测试库:

public class TestBase { 

 @BeforeTest
 @Parameters("browserName")
 public void threadHandler(String browserName) {

    Thread.currentThread().setName(browser.toLowerCase());
    if (DriverManager.getDriver() == null)
        DriverManager.setWebDriver(browser);
 }


}