如何使用 Selenium Grid 有效地分配负载
How to distribute the load efficiently with Selenium Grid
业务案例:我正在尝试自动化生产流程以取代人工 automation.I 在给定的一天以不同的时间间隔从应用程序接收许多触发器,并且一旦我得到触发器,脚本应该开始 运行 automatically.I 有 80 个节点(在 80 台机器中)配置到 Selenium 集线器。
场景: 触发器 1 应在其中一个空闲节点中执行 脚本 1。
触发器 2 应在其中一个空闲节点中执行脚本 2。
触发器 3 应在其中一个空闲节点中执行脚本 3。
触发器 4 应在其中一个空闲节点中执行 脚本 1。
在上面的场景中,脚本 1 将始终在一台特定的机器上执行 only.This 是因为在创建远程网络驱动程序时必须指定远程主机 url object.So 如果我获得两个触发器同时执行脚本 1 然后执行将在同一台机器上按顺序发生,尽管我有很多机器坐 idle.Parallel 执行不是这里的理想选择,因为我得到触发器开始 50-60 次执行同时执行相同的脚本。
问题陈述:我无法有效地在空闲机器上分配负载。
这是selenium grid的限制吗?有没有更好的方法来管理负载分配?是否可以在不指定节点的情况下创建远程webdriver url?
当使用 Selenium Grid 时,会设置一个集线器,物理机将自己注册到该集线器中并具有特定功能。例如,Mac 将在 Safari 中将自己注册为 Mac。 linux Mac hine 与 FireFox 和 Windows 机器作为支持 IE 的机器。
在您的测试中,您连接到 HUB 并请求连接到具有特定功能的机器。集线器然后用脚本随后连接到的可用机器的地址进行回复。这是 Hub 扮演的唯一角色,因此它应该正是您要寻找的。
浏览 Selenium HQ 站点上的示例,它应该会为您阐明。这个例子可以在一台机器上 运行 ,但理想情况下最好将它分成几台。
In the above scenario script 1 will always get executed in one
particular machines only.This is because it's mandatory to specify
remote host url while creating a remote web driver object.So if i get
two trigger to execute script 1 at the same time then the execution
will happen sequentially in the same machine though i have many
machines sitting idle.Parallel execution is not the ideal choice here
as i get triggers to start 50-60 executions of the same script at the
same time.
构建网格是为了确保分发正确进行,而您的测试不必解决这个问题。你如何实例化你的 RemoteWebDriver
?你传递给它的是什么URL?您应该传入 Grid Hub 的 URL 而不是节点的 URL.
只要您的测试仅限于 DesiredCapabilities
中的浏览器风格,Hub 就能够在所有节点上均匀分布测试。如果将 PLATFORM
也包含在等式中,则匹配匹配的节点数将会减少。在任何一种情况下,您都需要为您的问题提供以下附加详细信息才能获得特定答案:
- 你是如何启动你的节点的? [ 是否涉及任何节点配置JSON? ]
- 你如何实例化你的
RemoteWebDriver
业务案例:我正在尝试自动化生产流程以取代人工 automation.I 在给定的一天以不同的时间间隔从应用程序接收许多触发器,并且一旦我得到触发器,脚本应该开始 运行 automatically.I 有 80 个节点(在 80 台机器中)配置到 Selenium 集线器。
场景: 触发器 1 应在其中一个空闲节点中执行 脚本 1。 触发器 2 应在其中一个空闲节点中执行脚本 2。 触发器 3 应在其中一个空闲节点中执行脚本 3。 触发器 4 应在其中一个空闲节点中执行 脚本 1。
在上面的场景中,脚本 1 将始终在一台特定的机器上执行 only.This 是因为在创建远程网络驱动程序时必须指定远程主机 url object.So 如果我获得两个触发器同时执行脚本 1 然后执行将在同一台机器上按顺序发生,尽管我有很多机器坐 idle.Parallel 执行不是这里的理想选择,因为我得到触发器开始 50-60 次执行同时执行相同的脚本。
问题陈述:我无法有效地在空闲机器上分配负载。
这是selenium grid的限制吗?有没有更好的方法来管理负载分配?是否可以在不指定节点的情况下创建远程webdriver url?
当使用 Selenium Grid 时,会设置一个集线器,物理机将自己注册到该集线器中并具有特定功能。例如,Mac 将在 Safari 中将自己注册为 Mac。 linux Mac hine 与 FireFox 和 Windows 机器作为支持 IE 的机器。
在您的测试中,您连接到 HUB 并请求连接到具有特定功能的机器。集线器然后用脚本随后连接到的可用机器的地址进行回复。这是 Hub 扮演的唯一角色,因此它应该正是您要寻找的。
浏览 Selenium HQ 站点上的示例,它应该会为您阐明。这个例子可以在一台机器上 运行 ,但理想情况下最好将它分成几台。
In the above scenario script 1 will always get executed in one particular machines only.This is because it's mandatory to specify remote host url while creating a remote web driver object.So if i get two trigger to execute script 1 at the same time then the execution will happen sequentially in the same machine though i have many machines sitting idle.Parallel execution is not the ideal choice here as i get triggers to start 50-60 executions of the same script at the same time.
构建网格是为了确保分发正确进行,而您的测试不必解决这个问题。你如何实例化你的 RemoteWebDriver
?你传递给它的是什么URL?您应该传入 Grid Hub 的 URL 而不是节点的 URL.
只要您的测试仅限于 DesiredCapabilities
中的浏览器风格,Hub 就能够在所有节点上均匀分布测试。如果将 PLATFORM
也包含在等式中,则匹配匹配的节点数将会减少。在任何一种情况下,您都需要为您的问题提供以下附加详细信息才能获得特定答案:
- 你是如何启动你的节点的? [ 是否涉及任何节点配置JSON? ]
- 你如何实例化你的
RemoteWebDriver