当我针对使用K8s部署的硒网格并行运行多个测试时,我目前正在遇到此异常。我已经在AWS和Azure中部署了群集,并且收到了相同的错误。当我尝试运行多于节点的测试时,会发生错误,我可以成功运行一些测试,然后在短时间后,它将因此错误而使所有其余测试失败。
OpenQA.Selenium.WebDriverException:引发了具有空响应的异常,该异常将HTTP请求发送到URL xxxxxx.xxx.xxx/wd/hub/session的远程WebDriver服务器。异常的状态为ConnectionClosed,消息为:基础连接已关闭:连接意外关闭。
我已经调整了硒中心上的超时(浏览器超时,超时,newsesssiontimeout)以及remotewebdriver的命令超时,并且没有任何变化。在本地测试时,我也没有收到错误消息。
这是我当前的堆栈。
代码:
[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次测试后,测试运行将失败并产生该错误。
我正在寻找添加等待或超时的正确位置,以便我们可以正确处理测试队列。
先谢谢了。
答案 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秒,这似乎可以解决问题。