我有一个需要登录的应用程序,并且不允许在给定时间多次登录同一帐户。所以我有多达 60 个这样的测试用例。目前我正在处理它们的并行执行,如下所示:
- 通过初始化驱动程序对象,使用 CredzSet1 登录 @BeforeSuite。保存饼干。
- 在@BeforeMethod 中将cookies 设置为创建并刷新的新驱动程序对象。这将显示应用程序的主页,即成功登录
我想出了这种方法来避免每个测试用例的登录/注销步骤,并使用单个凭据集使并行执行成为可能。
现在这个方法工作得很好,但我在想是否还有其他替代方法,因为一个线程在整个执行时间内被@BeforeSuite 驱动程序对象占用,因为我只在执行结束时关闭该对象。??想要利用所有线程进行并行执行。
这是代码:
公共类 TestConfigs {
protected static SelectEnv loadedEnv;
protected static BrowserManager factory;
protected static String url = null;
private static Set<Cookie> cookies;
@BeforeSuite(alwaysRun = true)
public void startSuite() {
try{
loadedEnv = ConfigFactory.create(SelectEnv.class);
//Initiate browser
factory = BrowserManager.getInstance();
factory.setAnyDriver("chrome");
factory.getDriver().get(ConfigFactory.getProperty("url"));
Login login = new Login(factory.getDriver(), db);
//Logging in
login.verifyLogin(loadedEnv.usernameAU(), loadedEnv.password(),
loadedEnv.accesscode());
Thread.sleep(5000);
//Saving cookies
cookies = factory.getDriver().manage().getCookies();
}catch(Exception e) {
System.out.println("Exception in @BeforeSuite method");
e.printStackTrace();
}
}
@BeforeMethod(alwaysRun = true)
public synchronized void testSetup(Method method, Object[] obj) {
try {
System.out.println("********* In Before Method***************");
//Initiate browser
factory = BrowserManager.getInstance();
// Initiate browser
factory.setAnyDriver("chrome");
factory.getDriver().get(url);
if(cookies!=null) {
cookies.forEach( cookie -> factory.getDriver().manage().addCookie( cookie ));
factory.getDriver().get(url);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@AfterMethod(alwaysRun = true)
public void cleanUp() {
factory.getDriver().close();
factory.getDriver().quit();
}
@AfterSuite(alwaysRun = true)
public void afterSuiteCleanup() {
if(factory!=null && factory.getDriver() !=null) {
factory.getDriver().close();
}
}
}