当我 运行 多个测试用例时,TestNG 并行执行总是失败,其中只有一个测试脚本通过
TestNG Parallel execution always fails when i run more than one testcase, Among all only one testscript was passing
我正在使用 Testng 并行执行我的 Web 测试用例。我总共有 5 classes.
- BaseClass - 用于初始化和关闭我的浏览器
- 核心 class - 已初始化所有驱动程序的调解器
- 可重复使用的方法 - Click、settext、gettext...[扩展步骤 #2 核心 class,因此驱动程序仅来自那里]
- 页面对象 Class - 存储所有定位器,如名称、ID,xpath.Uses 所有这些可重用的方法,如 click、gettext、settext。
- 主要测试Class。
基础Class
public class TestNGBase {
ThreadLocal<WebDriver> localdriver = new ThreadLocal<>();
@BeforeMethod
public void initialize(){
System.setProperty("webdriver.chrome.driver","C:\SeleniumTest\chromedriver.exe");
localdriver.set(new ChromeDriver());
}
public WebDriver driver(){
Core.setDriver(localdriver.get());
return localdriver.get();
}
@AfterMethod
public void teardown(){
localdriver.get().close();
localdriver.remove();
}
}
核心Class:
public class Core {
protected static WebDriver driver;
public static void setDriver(WebDriver driverr) {
driver = driverr;
}
}
可重复使用Class:
public class WebMethods extends Core {
public WebMethods() {
}
public static void Click(By by) {
driver.findElement(by).click();
}
页面对象Class
public class pagemethods(){
By login = By.name("login");
public void login(){
WebMethods.click(login);}
}
MainTestclass1 : 将使用上面的 Pageobject
MainTestclass2 : 将使用上面的 Pageobject
MainTestclass3 : 将使用上面的 Pageobject
所以在上面的 3 个测试用例中,当我触发所有使用 testng.xml 文件的测试用例时。 3 新浏览器被初始化并成功打开 url。但是当我开始使用所有那些可重用的方法时,例如 click()。在 3 个测试用例中,两个测试用例中的任何一个总是失败。
我认为问题始于 Core class,因为它同时接收所有驱动程序。它正在倒塌一些东西。
谁能帮我解决这个并行执行失败的问题。
谢谢
尽量不要让主要 class 静态化。创建一个 class 来生成 class 的实例,然后执行。当你创建一个静态 class 时,该方法挂在那个 class 上,而不是一个实例。
例如
public WebDriver
{
WebDriver myWebDriver = new WebDriver();
myWebDriver.whateverMethod();
}
使用线程时避免静态。先试试看。
我正在使用 Testng 并行执行我的 Web 测试用例。我总共有 5 classes.
- BaseClass - 用于初始化和关闭我的浏览器
- 核心 class - 已初始化所有驱动程序的调解器
- 可重复使用的方法 - Click、settext、gettext...[扩展步骤 #2 核心 class,因此驱动程序仅来自那里]
- 页面对象 Class - 存储所有定位器,如名称、ID,xpath.Uses 所有这些可重用的方法,如 click、gettext、settext。
- 主要测试Class。
基础Class
public class TestNGBase {
ThreadLocal<WebDriver> localdriver = new ThreadLocal<>();
@BeforeMethod
public void initialize(){
System.setProperty("webdriver.chrome.driver","C:\SeleniumTest\chromedriver.exe");
localdriver.set(new ChromeDriver());
}
public WebDriver driver(){
Core.setDriver(localdriver.get());
return localdriver.get();
}
@AfterMethod
public void teardown(){
localdriver.get().close();
localdriver.remove();
}
}
核心Class:
public class Core {
protected static WebDriver driver;
public static void setDriver(WebDriver driverr) {
driver = driverr;
}
}
可重复使用Class:
public class WebMethods extends Core {
public WebMethods() {
}
public static void Click(By by) {
driver.findElement(by).click();
}
页面对象Class
public class pagemethods(){
By login = By.name("login");
public void login(){
WebMethods.click(login);}
}
MainTestclass1 : 将使用上面的 Pageobject MainTestclass2 : 将使用上面的 Pageobject MainTestclass3 : 将使用上面的 Pageobject
所以在上面的 3 个测试用例中,当我触发所有使用 testng.xml 文件的测试用例时。 3 新浏览器被初始化并成功打开 url。但是当我开始使用所有那些可重用的方法时,例如 click()。在 3 个测试用例中,两个测试用例中的任何一个总是失败。
我认为问题始于 Core class,因为它同时接收所有驱动程序。它正在倒塌一些东西。
谁能帮我解决这个并行执行失败的问题。
谢谢
尽量不要让主要 class 静态化。创建一个 class 来生成 class 的实例,然后执行。当你创建一个静态 class 时,该方法挂在那个 class 上,而不是一个实例。
例如
public WebDriver
{
WebDriver myWebDriver = new WebDriver();
myWebDriver.whateverMethod();
}
使用线程时避免静态。先试试看。