如何使用 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 也包含在等式中,则匹配匹配的节点数将会减少。在任何一种情况下,您都需要为您的问题提供以下附加详细信息才能获得特定答案:

  1. 你是如何启动你的节点的? [ 是否涉及任何节点配置JSON? ]
  2. 你如何实例化你的 RemoteWebDriver