与Kubernetes一起部署时,Selenium Hub无法处理测试队列

时间:2018-09-24 23:29:05

标签: selenium docker kubernetes selenium-grid

当我针对使用K8s部署的硒网格并行运行多个测试时,我目前正在遇到此异常。我已经在AWS和Azure中部署了群集,并且收到了相同的错误。当我尝试运行多于节点的测试时,会发生错误,我可以成功运行一些测试,然后在短时间后,它将因此错误而使所有其余测试失败。

  

OpenQA.Selenium.WebDriverException:引发了具有空响应的异常,该异常将HTTP请求发送到URL xxxxxx.xxx.xxx/wd/hub/session的远程WebDriver服务器。异常的状态为ConnectionClosed,消息为:基础连接已关闭:连接意外关闭。

我已经调整了硒中心上的超时(浏览器超时,超时,newsesssiontimeout)以及remotewebdriver的命令超时,并且没有任何变化。在本地测试时,我也没有收到错误消息。

这是我当前的堆栈。

  • RemoteWebdriver:3.14.0
  • Selenium Hub:3.14.0
  • 硒节点:3.14.0
  • Chrome:69
  • C#/ Nunit
  • AKS / EKS

代码:

    [TestCaseSource(typeof(MyFactoryClass), nameof(MyFactoryClass.TestCases))]
    public void ZaleniumTest(int x)
    {
        var caps = new DesiredCapabilities();
        caps.SetCapability("browserName", "chrome");
        var driver =
            new RemoteWebDriver(new Uri(Url), caps, TimeSpan.FromSeconds(1200)) {Url = "http://www.google.com"};
        driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1200);
        var query = driver.FindElement(By.Name("q"));
        query.SendKeys("Cheese");
        query.Submit();
        System.Threading.Thread.Sleep(3000);
        Assert.IsTrue(driver.Title.Contains("Google"));
        driver.Quit();
    }      

这是我运行的用于部署网格的命令:

    kubectl run selenium-hub --image selenium/hub:latest --port 4444
    kubectl expose deployment selenium-hub --type=LoadBalancer
    kubectl run selenium-node-chrome --image selenium/node-chrome:latest --env="HUB_PORT_4444_TCP_ADDR=selenium-hub" --env="HUB_PORT_4444_TCP_PORT=4444"

通过这种简单的网格设置(1个集线器1个chrome节点),我尝试运行20个测试,期望测试会排队。经过约10次测试后,测试运行将失败并产生该错误。

我正在寻找添加等待或超时的正确位置,以便我们可以正确处理测试队列。

先谢谢了。

2 个答案:

答案 0 :(得分:0)

您没有说您要连接的主机。您确定要连接到Kubernetes创建的负载均衡器吗?
尝试kubectl expose deployment selenium-hub --type=LoadBalancer --name=my-service,然后尝试kubectl describe services my-service
那应该告诉您设置负载均衡器是否存在问题,以及您实际应该连接到哪个IP /主机。

答案 1 :(得分:0)

我能够找到问题所在。事实证明,AWS和Azure中的负载均衡器都有一个空闲超时设置。对于我在AWS中的情况,它设置为60秒。我将超时设置为3600秒,这似乎可以解决问题。