如何使用Selenium Grid有效地分配负载

时间:2017-01-28 08:17:57

标签: selenium selenium-webdriver selenium-grid

商业案例:我正在尝试自动化生产流程,以自动化取代人类。我会在不同的时间间隔内从应用程序收到许多触发器,一旦我获得触发器,脚本应该自动开始运行。我有80个节点(在80台机器中)配置到Selenium集线器。

场景:触发器1应在其中一个空闲节点中执行脚本1 。            触发器2应该在其中一个空闲节点中执行脚本2。            触发器3应该在其中一个空闲节点中执行脚本3。            触发器4应在其中一个空闲节点中执行脚本1

在上面的场景中,脚本1总是只在一台特定的机器上执行。这是因为在创建远程Web驱动程序对象时必须指定远程主机URL。所以如果我得到两个触发器来同时执行脚本1然后执行将在同一台机器上顺序执行,虽然我有很多机器闲置。并行执行不是理想的选择,因为我得到触发器同时开始50-60次执行相同的脚本。

问题陈述:我无法在免费计算机上有效地分配负载。

是否是对selenium网格的限制?有没有更好的方法来管理负载分配?是否可以在不指定节点URL的情况下创建远程webdriver?

2 个答案:

答案 0 :(得分:1)

  

在上面的场景中,脚本1将始终在一个中执行   仅限特定机器。这是因为必须指定   创建远程Web驱动程序对象时远程主机URL。如果我得到   两个触发器同时执行脚本1然后执行   虽然我有很多,但会在同一台机器上顺序发生   机器闲置。并行执行不是这里的理想选择   因为我得到触发器开始50-60执行相同的脚本   同一时间。

构建网格是为了确保分发正确发生,并且您的测试不必解决这个问题。你如何实例化RemoteWebDriver?你传递给它的URL是什么?您应该传入Grid Hub的URL而不是节点的URL。

只要您的测试仅限于DesiredCapabilities中的浏览器风格,Hub就能够在所有节点上均匀分布测试。如果您还将PLATFORM包含在等式中,那么适合匹配的节点数将减少。在任何一种情况下,您都需要为问题包含以下其他详细信息才能获得具体答案:

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

答案 1 :(得分:-1)

使用Selenium Grid时,会设置集线器,物理机器会使用特定功能注册自己。例如,Mac会将自己注册为使用Safari的Mac。使用FireFox的Linux机器和作为支持IE的机器的Windows机器。

在测试中,您连接到HUB并请求连接到具有特定功能的机器。然后,集线器将回复脚本随后连接的可用计算机的地址。这是Hub扮演的唯一角色,因此它应该正是您所寻找的。

浏览Selenium HQ网站上的示例,它应该为您澄清。这个例子可以在一台机器上运行,但理想情况下将它分成几个是很好的。