我正在尝试使用testng并行运行我的自动化测试(Selenium webdriver) . 这是我正在运行的节点:
java -Dwebdriver.gecko.driver=chromedriver.exe -jar selenium-server-standalone-3.4.0.jar -role node -hub http://localhost:4444/grid/register -browser browserName=chrome,maxInstances=2 -maxSession 2
这是我的测试类:
public class TestParallel {
Login login;
//@BeforeMethod(alwaysRun = true)
public SeleniumDriverCore testSetup() throws FileNotFoundException, IOException{
SeleniumDriverCore driver = new SeleniumDriverCore("config/chromeDriverConfig");
Properties config = new Properties();
config.load(new FileInputStream("config/testConfig"));
this.login = new Login(driver);
driver.browser.open("https://test.test.xyz");
driver.browser.maximize();
driver.waits.waitForPageToLoad();
return driver;
}
@Test(groups={"parallel"})
public void test_one() throws FileNotFoundException, IOException{
SeleniumDriverCore driver=testSetup();
login.navigateToPage(Pages.LOGIN);
login.assertion.verifyLoginPopupAndTitleDisplayed();
testCleanup(driver);
}
@Test(groups={"parallel"})
public void test_two() throws FileNotFoundException, IOException{
SeleniumDriverCore driver=testSetup();
login.navigateToPage(Pages.LOGIN);
login.assertion.verifyLoginPopupAndTitleDisplayed();
testCleanup(driver);
}
@Test(groups={"parallel"})
public void test_three() throws FileNotFoundException, IOException{
SeleniumDriverCore driver=testSetup();
login.navigateToPage(Pages.LOGIN);
login.assertion.verifyLoginPopupAndTitleDisplayed();
testCleanup(driver);
}
@Test(groups={"parallel"})
public void test_four() throws FileNotFoundException, IOException{
SeleniumDriverCore driver=testSetup();
login.navigateToPage(Pages.LOGIN);
login.assertion.verifyLoginPopupAndTitleDisplayed();
testCleanup(driver);
}
public void testCleanup(SeleniumDriverCore driver){
driver.close();
driver.quit();
}
}
这是我的xml:
<suite name="Ontega - All Tests Mobile" parallel="methods" thread-count="2">
<test name="Ontega - All Tests Mobile">
<groups>
<run>
<include name="parallel"/>
<exclude name="open-defects"/>
</run>
</groups>
<packages>
<package name="tests.*"/>
</packages>
</test>
</suite>
当我运行XML时,我希望我的测试一次在两个线程中的两个浏览器上运行,但是当我运行XML时,我第一次运行两个浏览器实例,然后它们增加了50%测试失败,你可以看到我试图在我的每个方法中实例化驱动程序,虽然这不是我的框架如何工作,但我试图找到这个问题的瓶颈 . 任何帮助将非常感谢提前感谢
2 回答
以下是在TestNG中执行此操作的一些方法 . 您基本上通过
@BeforeMethod
和@AfterMethod
配置方法管理您的webdriver实例化和清理 . 那么您需要决定如何使用@Test
方法共享创建的webdriver实例 . 为此你有三个选择:ThreadLocal
变体,因为TestNG向您保证它将在同一个线程中执行@BeforeMethod
,@Test
和@AfterMethod
.这是一个示例,向您展示了这一点
ITestResult
对象共享webdriver实例 . 这是一个展示行动的样本 .org.testng.IInvokedMethodListener
的监听器,它将创建的webdriver设置为ITestResult
(如选项2所示)或ThreadLocal
(如选项1所示) . 你可以找到更多有关此选项的详细信息以及我的blog post中的代码段 .您似乎每次测试都会创建多个驱动程序 . 我想你需要在testSetup()方法之外保留一些代码
我正在分享我用于并行测试的部分代码,可能会对你的情况有所帮助
我的xml