java - TestNG:使用多个测试类在套件文件中执行并行测试
问题描述
我正在尝试运行配置套件文件的并行测试。这些测试适用于使用 Selenium 的 Web 应用程序。套件文件由多个测试组成。每个测试包含多个测试类。每个测试中的第一个类用于初始化(@BeforeTest)WebDriver 并关闭它(@AfterTest)。WebDriver 是静态的,以便将其传递给其他类(原因是我们需要从最后一个测试类结束的地方继续测试)。
当套件配置为按顺序运行测试时,测试成功运行。但是当套件配置为并行运行测试时,所有套件测试仅使用最后加载的 webdriver,并且每个测试都没有在各自的浏览器中运行。
你知道我该如何克服这种情况吗?
检查下面的套件模板:
<suite name="Register and Login functionality" parallel="tests" thread-count="2">
<test name="Test-1">
<parameter name="browser" value="chrome" />
<classes>
<class name="Init" />
<class name="Register" />
<class name="Login" />
</classes>
</test>
<test name="Test-2">
<parameter name="browser" value="chrome" />
<classes>
<class name="Init" />
<class name="Register" />
<class name="Login" />
</classes>
</test>
</suite>
来自 Init 测试类的模板:
public class Init{
private static WebDriver driver;
public WebDriver getWebDriver(){
return this.driver;
}
@BeforeTest
public void setUp(){
driver = new ChromeWebDriver();
}
@AfterTest
public void quit(){
driver.stop();
}
}
注册测试类的模板:
public class Register{
private WebDriver driver;
@BeforeClass
public void setUp(){
driver = Init.getWebDriver();
}
@Test
public void test1(){
........
........
}
@Test
public void test2(){
........
........
}
}
登录测试类的模板:
public class Login{
private WebDriver driver;
@BeforeClass
public void setUp(){
driver = Init.getWebDriver();
}
@Test
public void test1(){
........
........
}
@Test
public void test2(){
........
........
}
}
解决方案
您在初始化类中使用静态 webdriver,这将确保只启动一个 webdriver 实例。
private static WebDriver driver;
正如您在问题中提到的,每个测试都没有在各自的浏览器中运行。您需要更改静态网络驱动程序。删除静态 Web 驱动程序并为每个测试启动 Web 驱动程序,这将在新浏览器中打开每个测试。
推荐阅读
- javascript - 如何使用数组删除对象内的对象?(React.js 减速器)
- oauth-2.0 - OpenId Blazor refresh_token
- javascript - 删除重复 ($addToSet) mongoose 聚合后如何对数据求和
- javascript - Javascript (Node.js) - 重构一个长函数
- flutter - 关于“flutter build web”命令的“--web-renderer auto”选项的说明
- c - C99 是否假设支持次正规数?
- c++ - 如何将字符串分成几部分并将它们读取为十六进制值?
- android - 如何根据屏幕分辨率查找主屏幕图标大小
- android - 即使应用程序关闭,如何在android中循环运行服务
- grep - 如何在 Grep 语句中包含可选空格