selenium - Selenium Grid Session 无法自动关闭并在多次运行后变得无响应
问题描述
我不知道这是否是设计使然,只是注意到我是这样设置 testNG 的:
<suite name="Suite" parallel="classes" thread-count="4">
<test name="Test">
<classes>
<class name="Test2"/>
<class name="Test1"/>
<class name="Test3"/>
<class name="Test4"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
然后在我的测试中,
public class BaseTest {
@AfterTest
public void afterAll() {
System.out.println("tear down webdriver here ");
this.webDriver.quit();
}
}
Test1 到 Test 4 都在扩展这个基础测试。
但是我注意到 selenium hub 刷新启动后,有两个节点,前几次运行都很好,但是当查看控制台时,可用资源越来越少,运行几次后,没有可用资源了所有的测试都在等待。实际上,每次调用 webdriver.quit() 时,它只关闭一个会话,其他会话仍然打开。
这使得 Selenium Grid 解决方案一点也不优雅,我们不得不借用很多额外的解决方案,例如每当我们开始新的测试工作时重新启动 selenium 网格等。
那么,为什么 driver.quit() 不能关闭所有网格会话,而是只关闭一个会话?驱动程序已经是单例的,并且已经在所有测试用例之间共享。
希望听到您对此的建议。
谢谢
解决方案
我相信您也必须研究以下实用程序。它可以根据收到的请求动态增加和减少节点。现在让我们来回答你的问题。根据您的问题,我能够理解 webdriver 实例是单例的。问题是,如果您的主要目标是实现并行测试,请不要让您的 webdriver 单例。也请查看最佳实践。https://docs.expitest.com/display/TE/Parallel+Tests+-+Best+Practices
https://github.com/frostyaxe/Talongrid/tree/master
推荐阅读
- windows - 使用 Power Shell 更改 Windows“列表分隔符”
- c - 这里有人使用赛普拉斯 PSoC6 吗?运行闪烁程序时遇到问题
- python - 如何以有效的方式提取遵循相同模式的特定数量和特定类型的字符串?
- python - 为什么在代表深度学习任务的棋盘时使用逻辑移位?
- scala - 大摇大摆如何定义 map[String, Boolean] 作为响应
- authentication - 电子邮件/密码验证后如何自动登录用户
- c# - SQLite 随机数据库连接崩溃
- javascript - ..为什么 req.session 保存在 sessionStore.sessions 以及如何从 sessionStore 访问值
- javascript - DOM 操作,动态过滤(vanilla js)。我可以将它们记录在控制台中,但是当我以 HTML 显示它们时,产品不会被过滤(全部显示)
- amazon-web-services - x509: 证书对 * 有效
, 不是