【问题标题】:How to run a single testng test case in multiple parallel threads如何在多个并行线程中运行单个 testng 测试用例
【发布时间】:2019-01-25 06:29:33
【问题描述】:

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

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。
  • 请参阅:How do I do X? SO 的期望是,提出问题的用户不仅会进行研究以回答他们自己的问题,还会分享研究、代码尝试和结果。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask
  • 要多次运行同一个测试用例,可以使用这段代码@Test(invocationCount = 100) public void testCount() { }
  • 对于并行执行,您可以使用多线程。

标签: java selenium testng


【解决方案1】:

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
}

创建一个驱动程序处理程序和一个测试库类。使用 Driver 处理程序设置和获取 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);
 }


}

【讨论】:

    猜你喜欢
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多