商业案例:我正在尝试自动化生产流程,以自动化取代人类。我会在不同的时间间隔内从应用程序收到许多触发器,一旦我获得触发器,脚本应该自动开始运行。我有80个节点(在80台机器中)配置到Selenium集线器。
场景:触发器1应在其中一个空闲节点中执行脚本1 。 触发器2应该在其中一个空闲节点中执行脚本2。 触发器3应该在其中一个空闲节点中执行脚本3。 触发器4应在其中一个空闲节点中执行脚本1 。
在上面的场景中,脚本1总是只在一台特定的机器上执行。这是因为在创建远程Web驱动程序对象时必须指定远程主机URL。所以如果我得到两个触发器来同时执行脚本1然后执行将在同一台机器上顺序执行,虽然我有很多机器闲置。并行执行不是理想的选择,因为我得到触发器同时开始50-60次执行相同的脚本。
问题陈述:我无法在免费计算机上有效地分配负载。
是否是对selenium网格的限制?有没有更好的方法来管理负载分配?是否可以在不指定节点URL的情况下创建远程webdriver?
答案 0 :(得分:1)
在上面的场景中,脚本1将始终在一个中执行 仅限特定机器。这是因为必须指定 创建远程Web驱动程序对象时远程主机URL。如果我得到 两个触发器同时执行脚本1然后执行 虽然我有很多,但会在同一台机器上顺序发生 机器闲置。并行执行不是这里的理想选择 因为我得到触发器开始50-60执行相同的脚本 同一时间。
构建网格是为了确保分发正确发生,并且您的测试不必解决这个问题。你如何实例化RemoteWebDriver
?你传递给它的URL是什么?您应该传入Grid Hub的URL而不是节点的URL。
只要您的测试仅限于DesiredCapabilities
中的浏览器风格,Hub就能够在所有节点上均匀分布测试。如果您还将PLATFORM
包含在等式中,那么适合匹配的节点数将减少。在任何一种情况下,您都需要为问题包含以下其他详细信息才能获得具体答案:
RemoteWebDriver
答案 1 :(得分:-1)
使用Selenium Grid时,会设置集线器,物理机器会使用特定功能注册自己。例如,Mac会将自己注册为使用Safari的Mac。使用FireFox的Linux机器和作为支持IE的机器的Windows机器。
在测试中,您连接到HUB并请求连接到具有特定功能的机器。然后,集线器将回复脚本随后连接的可用计算机的地址。这是Hub扮演的唯一角色,因此它应该正是您所寻找的。 p>
浏览Selenium HQ网站上的示例,它应该为您澄清。这个例子可以在一台机器上运行,但理想情况下将它分成几个是很好的。