【问题标题】:Is there a way to schedule the shutdown of Selenium nodes without breaking tests?有没有办法在不破坏测试的情况下安排 Selenium 节点的关闭?
【发布时间】:2016-09-12 02:41:28
【问题描述】:

我已经建立了一个 Selenium Grid,其中有 3 个不同的服务器运行节点作为 Windows 服务。我需要定期重新启动这些机器以避免内存泄漏和性能下降。为此,我需要安排一个作业来关闭服务器上的节点并重新启动,同时将测试推送到其余服务器。然后对其他服务器上的计划作业重复相同的过程。

有没有办法在当前测试完成后关闭 selenium 节点?或者获取特定节点的状态,以便我可以在计划的作业中自己检查每个节点,以确保节点在关闭之前没有运行测试?

【问题讨论】:

    标签: selenium selenium-webdriver jenkins automated-tests selenium-grid


    【解决方案1】:

    您可以通过使用/sessions 命令请求每个节点来检查活动会话的数量:

    http://127.0.0.1:4444/wd/hub/sessions
    

    回应:

    {"state":"success","sessionId":null,"hCode":3217742,"value":[],"class":"org.openqa.selenium.remote.Response","status":0}
    

    【讨论】:

    • 谢谢。我以前见过这个,但认为这是集线器上的查询,使用它时遇到了一些错误。只有在我在这里看到它之后,我才意识到它被用作 http://:/wd/hub/sessions.
    • 后续问题:我可以使用您提到的命令查看哪些节点具有活动会话。但是当我尝试使用以下命令关闭节点时:node_ip_address:port/selenium-server/driver/…。关闭和集线器不再使用之间的等待时间不够快,无法避免将新测试分配给该节点。您是否知道加快该过程或实际取消注册节点而不是杀死它并等待它在集线器上超时以从网格中删除的方法?
    • 似乎无法通过向主集线器发送命令来取消注册节点。
    【解决方案2】:

    @Sh3mm

    前段时间,我写了一篇博客文章,主要讨论如何构建“自我修复网格”,这正是你所追求的。

    您可以阅读我发自 here 的博客文章。

    在构建 SeLion Grid 时,我们基本上使用了相同的方法。 SeLion Grid 包含更多复杂功能。阅读更多关于它的信息here

    GroupOn 作为其 Grid Extras 的一部分构建了另一种基本相同类型的功能。你可以看看here

    【讨论】:

    • 感谢 Krishnan,我确实看到了那篇博客文章,但我不确定它是否正是我所追求的。我使用 nssm 安装了集线器和节点以作为 Windows 服务运行。我想知道的部分内容是何时不使用它们来重新启动服务器,而不仅仅是节点。我不确定 Grid Extras 是否可以配置为 Windows 服务,或者是否有必要全力以赴构建一个 servlet。我希望简单地运行一个计划的作业来检查一个节点是否正在使用,如果没有关闭它,一旦所有节点都关闭,重新启动服务器。在其他机器上重复此操作
    • 在您的解决方案中,您如何处理这样一个事实,即当节点未注册时,集线器不会立即知道并将继续尝试为其分配测试,直到超时?
    • @Sh3mm 在该解决方案中,当网格要发送“kill”指令时,它还会从其注册表中删除节点。所以你喊出来的场景永远不会发生。
    • 请在您的答案中包含足够的信息,以便在没有链接的情况下有用,否则如果链接的目标消失,答案将变得无用。
    • @AmericanUmlaut - 我包含我的博客的原因是因为这个概念本身需要一些解释,如果我要复制粘贴内容,它实际上会复制我的博客。其他链接当然来自github
    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 2013-02-18
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多