如何通过打开多个窗口一次使用 Selenium TestNG 执行负载测试

Posted

技术标签:

【中文标题】如何通过打开多个窗口一次使用 Selenium TestNG 执行负载测试【英文标题】:How to Perform load Testing with Selenium TestNG at a time by opening multiple windows 【发布时间】:2018-06-27 07:57:46 【问题描述】:

我已经执行了下面的代码来进行负载测试

 @Test(invocationCount = 5, threadPoolSize = 1)
 public void GmailLogin() throws InterruptedException 

 System.setProperty("webdriver.chrome.driver", "D:\\CIPL0564\\D 
Drive\\Software\\chromedriver_win32\\chromedriver.exe");
 driver = new ChromeDriver();
 driver.manage().window().maximize();
driver.get("https://tst-oec-ebooking.azurewebsites.net/");
driver.manage().timeouts().implicitlyWait(6000, TimeUnit.SECONDS);
driver.findElement(By.xpath("//*[@id=\"Email\"]")).sendKeys("mad@dayrep.com");
driver.manage().timeouts().implicitlyWait(6000, TimeUnit.SECONDS);
driver.findElement(By.xpath("//*[@id=\"Password\"]")).sendKeys("Pass@123");
driver.findElement(By.xpath("//*[@id=\"login_submit\"]")).click();
Thread.sleep(1500);
driver.manage().timeouts().implicitlyWait(5000, TimeUnit.SECONDS);
driver.quit();

它执行了 5 次,没有错误,但一个接一个。我需要通过打开多个窗口一次执行此操作。 我已经尝试给 threadPoolSize = 5,但由于会话未创建而出现错误。

【问题讨论】:

【参考方案1】:

TestNG 运行器将为所有运行的测试方法创建一个测试类实例。这种逻辑在并行运行时也会出现。看起来您的 WebDriver 对象是全局定义的,因此在每次调用“driver = new ChromeDriver()”时,它都会覆盖另一个。

我对您的建议是使用 ThreadLocal 对象来定义您的 WebDriver 会话。这样,给定线程中的每个 WebDriver 对象都充当独立的数据集。 有关此主题的更详细说明,请参阅此链接http://seleniumautomationhelper.blogspot.com/2014/02/initializing-webdriver-object-as-thread.html

【讨论】:

感谢您的回复。我对你给出的概念有清楚的认识。但我没有得到如何在我的代码中实现它。能否请您提一下我该如何实现它 您需要创建一个单独的类,例如附加链接中描述的 DriverFactory。你甚至可以复制粘贴代码,通过一些调整,这个实现应该可以解决你的问题。 对我来说还有另一个问题..使用上面的代码,应用程序以相同的登录名运行 5 次。我想在多个浏览器中一次运行 5 次登录。 多浏览器有什么问题?你的意思是,firefox、chrome、IE 等? 是的,我想在 Firefox、Chrome 和 IE 中运行它

以上是关于如何通过打开多个窗口一次使用 Selenium TestNG 执行负载测试的主要内容,如果未能解决你的问题,请参考以下文章

java+selenium——打开多个窗口,并切换窗口——方法一

Selenium窗口切换-----Selenium快速入门

java+selenium——打开多个窗口,并切换窗口——方法三

如何解决Selenium句柄多窗口问题

java+selenium——打开多个窗口,并切换窗口——方法二

如何在 Selenium for Python 中切换到新窗口?