gpt4 book ai didi

java - Selenium +Java : Parallel execution for test cases having login functionality

转载 作者:行者123 更新时间:2023-12-01 16:47:35 24 4
gpt4 key购买 nike

我有一个需要登录的应用程序,并且不允许在给定时间多次登录同一帐户。所以我有多达 60 个这样的测试用例。目前我正在按如下方式处理它们的并行执行:

  • 通过初始化驱动程序对象,使用 CredzSet1 登录 @BeforeSuite。保存cookie。
  • 在@BeforeMethod中将cookie设置为创建的新驱动程序对象并刷新。这将显示应用程序的主页,即登录成功

我提出了这种方法,以避免每个测试用例的登录/注销步骤,并使用单个凭据集实现并行执行。

现在这个方法工作得很好,但我在想是否还有其他替代方法,因为一个线程在整个执行时间内被 @BeforeSuite 驱动程序对象占用,因为我仅在执行结束时关闭该对象。?希望利用所有线程并行执行。

这是代码:

公共(public)类 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();
}
}

}

最佳答案

您可以按照 https://www.baeldung.com/java-synchronized 中的说明创建同步方法。 .

对于同步方法,一次只有一个线程可以使用该方法。从而确保一次仅发生一次登录。

因此,如果您将 login.verifyLogin() 转换为同步方法,这应该可以工作。

关于java - Selenium +Java : Parallel execution for test cases having login functionality,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61745316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com