如何 运行 使用 selenium 网格在多个浏览器中并行或串行测试套件
How to run test suites parallel or serially in multiple browser using selenium grid
如何使用 selenium 网格 运行 在多个浏览器中并行或串行测试套件。
我有 3 个 xml 文件,一个 chrome.xml(包含我在 chrome 中的所有测试 运行),一个 firefox.xml(包含我所有的测试运行 在 firefox 中)和 testng.xml 包含两者作为套件。
Chrome.xml
<suite name="Chrome">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
<parameter name="browser" value="chrome"/>
<classes>
<class name="ww5.testcases.version.version" ></class>
<class name="ww5.testcases.loginSuite.LoginTest" ></class>
<class name="ww5.testcases.loginSuite.LogoutTest" ></class>
</classes>
</test>
</suite>
firefox.xml
<suite name="Firefox">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
<parameter name="browser" value="firefox"/>
<classes>
<class name="ww5.testcases.version.version" ></class>
<class name="ww5.testcases.loginSuite.LoginTest" ></class>
<class name="ww5.testcases.loginSuite.LogoutTest" ></class>
</classes>
</test>
</suite>
testng.xml
<suite name="My Project" parallel="tests">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<suite-files>
<suite-file path="./Chrome.xml" />
<suite-file path="./firefox.xml" />
</suite-files>
</suite>
提前致谢,我正在使用页面对象模型,因此每个浏览器都有套件文件。
- 使您的 WebDriver 线程安全。
- 在
@BeforeTest
中初始化您的 WebDriver 并在 @AfterTest
中使用 quit()
。
你可以在我的一个问题下找到一个例子:Parameterized Selenium Tests in Parallel with TestNG
更新:
如何使您的 WebDriver 线程安全:
private List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
private ThreadLocal<WebDriver> driverThread;
@BeforeTest()
public void beforeTest() {
//...
this.driverThread = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue() {
WebDriver webDriver = new RemoteWebDriver(...);
webDriverPool.add(webDriver);
return webDriver;
}
};
}
@AfterTest(alwaysRun = true)
public void afterTest() {
for (WebDriver driver : this.webDriverPool) {
driver.quit();
}
}
// Use this method instead of driver.get()
public WebDriver getDriver() {
return this.driverThread.get();
}
}
如何使用 selenium 网格 运行 在多个浏览器中并行或串行测试套件。 我有 3 个 xml 文件,一个 chrome.xml(包含我在 chrome 中的所有测试 运行),一个 firefox.xml(包含我所有的测试运行 在 firefox 中)和 testng.xml 包含两者作为套件。
Chrome.xml
<suite name="Chrome">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
<parameter name="browser" value="chrome"/>
<classes>
<class name="ww5.testcases.version.version" ></class>
<class name="ww5.testcases.loginSuite.LoginTest" ></class>
<class name="ww5.testcases.loginSuite.LogoutTest" ></class>
</classes>
</test>
</suite>
firefox.xml
<suite name="Firefox">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
<parameter name="browser" value="firefox"/>
<classes>
<class name="ww5.testcases.version.version" ></class>
<class name="ww5.testcases.loginSuite.LoginTest" ></class>
<class name="ww5.testcases.loginSuite.LogoutTest" ></class>
</classes>
</test>
</suite>
testng.xml
<suite name="My Project" parallel="tests">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<suite-files>
<suite-file path="./Chrome.xml" />
<suite-file path="./firefox.xml" />
</suite-files>
</suite>
提前致谢,我正在使用页面对象模型,因此每个浏览器都有套件文件。
- 使您的 WebDriver 线程安全。
- 在
@BeforeTest
中初始化您的 WebDriver 并在@AfterTest
中使用quit()
。
你可以在我的一个问题下找到一个例子:Parameterized Selenium Tests in Parallel with TestNG
更新:
如何使您的 WebDriver 线程安全:
private List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
private ThreadLocal<WebDriver> driverThread;
@BeforeTest()
public void beforeTest() {
//...
this.driverThread = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue() {
WebDriver webDriver = new RemoteWebDriver(...);
webDriverPool.add(webDriver);
return webDriver;
}
};
}
@AfterTest(alwaysRun = true)
public void afterTest() {
for (WebDriver driver : this.webDriverPool) {
driver.quit();
}
}
// Use this method instead of driver.get()
public WebDriver getDriver() {
return this.driverThread.get();
}
}