【问题标题】:How to execute script on Multiple nodes parallely using Selenium Grid如何使用 Selenium Grid 在多个节点上并行执行脚本
【发布时间】:2016-07-30 14:18:57
【问题描述】:

以下是我的代码 -

DesiredCapabilities capability = DesiredCapabilities.firefox();
capability.setBrowserName("firefox");
capability.setPlatform(Platform.VISTA);
driver  = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
driver.manage().window().maximize();
driver.get(url);

我想在 3 个不同的节点上执行我的脚本

为了启动 HUB,我使用以下命令:- java -jar selenium-server-standalone-2.53.0.jar -role hub -port 4444

对于节点

节点 1:- java -jar selenium-server-standalone-2.53.0.jar -role webdriver -hub http://192.168.1.118:4444/grid/register -port 5556

节点 2:- java -jar selenium-server-standalone-2.53.0.jar -role webdriver -hub http://192.168.1.118:4444/grid/register -port 5557

节点 3:- java -jar selenium-server-standalone-2.53.0.jar -role webdriver -hub http://192.168.1.118:4444/grid/register -port 5558

所有 3 个节点都在 3 台不同的机器上所以我的问题是我需要在我的代码中提及所有 3 个节点的 IP 地址还是有什么方法可以在所有 3 台机器上并行执行脚本?

【问题讨论】:

    标签: selenium-webdriver selenium-grid


    【解决方案1】:

    不,您不能直接执行此操作。默认情况下,我认为一个节点支持 5 个会话。因此,只有在节点 1 中的所有 5 个会话都用尽后,测试才能转到第二个节点。因此,为了让您能够在所有 3 个节点上并行运行测试,您需要以 1 的 maxSession 启动所有节点,然后为您的测试分拆 3 个线程。这将导致所有节点同时运行您的测试。但只是想知道为什么要对所有节点运行测试?你的用例是什么?

    【讨论】:

    • 克里希南,我对此表示怀疑。我认为集线器不会耗尽一个节点的所有浏览器,然后再使用第二个节点。我认为它将第一个请求分配给node1的第一个浏览器,然后将第二个请求分配给node2的第一个浏览器,第三个请求分配给node3的第一个浏览器,然后重复循环。如果我错了,请纠正我。
    • @pArAs 显然,节点分布的逻辑最近似乎发生了变化。作为提交github.com/SeleniumHQ/selenium/commit/… 的一部分,行为已更改为考虑资源利用率,然后将该信息与创建的最后一个会话的时间戳结合起来(如果有两个节点具有相同的资源利用率)来决定这一点。所以我不会粗略地说它就像一个循环技术,一个节点一个节点地进行新的会话分发,但在高层次上是的,它也可以这样调用。
    【解决方案2】:

    如果您使用的是 testNG,那么您可以使用 testng.xml 中的 'parallel' 属性作为示例博客参考 here

    您也可以使用带有<forkCount> 标签的Maven 的maven-failsafe-plugin,看看this

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 2014-06-14
      相关资源
      最近更新 更多