Selenium Hub не может обрабатывать тестовую очередь при развертывании с Kubernetes - PullRequest
0 голосов
/ 25 сентября 2018

В настоящее время я работаю с этим исключением, когда параллельно запускаю несколько тестов для сетки селена, развернутой с использованием K8.Я развернул кластеры в AWS и Azure и получил ту же ошибку.Ошибка возникает, когда я пытаюсь выполнить больше тестов, чем есть узлов, я могу успешно выполнить несколько тестов, а затем через короткий промежуток времени все остальные тесты пройдут с этой ошибкой.

OpenQA.Selenium.WebDriverException: было сгенерировано исключение с нулевым ответом при отправке HTTP-запроса на удаленный сервер WebDriver для URL-адреса xxxxxx.xxx.xxx/wd/hub/session.Состояние исключения было ConnectionClosed, и сообщение было следующим: Основное соединение было закрыто: Соединение было неожиданно закрыто.

Я настроил тайм-ауты на концентраторе селена (тайм-аут браузера, тайм-аут, newsesssiontimeout)а также время ожидания команды от удаленного веб-драйвера и ничего не меняется.Я также не получаю сообщение об ошибке при локальном тестировании.

Вот мой текущий стек.

  • RemoteWebdriver: 3.14.0
  • Selenium Hub: 3.14.0
  • Selenium Node: 3.14.0
  • Хром: 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 хромовый узел) я пытаюсь запустить 20 тестов, ожидая, что тесты будут поставлены в очередь.Приблизительно после 10 прохождений тестов тестовый запуск завершится неудачно и выдаст эту ошибку.

Я ищу правильные места для добавления ожидания или тайм-аута, чтобы мы могли правильно обрабатывать очередь тестов.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Мне удалось найти проблему.Оказывается, для балансировщиков нагрузки есть настройка времени простоя как в AWS, так и в Azure.Для моего случая в AWS было установлено значение 60 секунд.Я установил тайм-аут на 3600 секунд, и это, похоже, решило проблему.

0 голосов
/ 26 сентября 2018

Вы не сказали, к какому хосту вы пытаетесь подключиться.Вы уверены, что подключаетесь к балансировщику нагрузки, созданному Kubernetes?
Попробуйте kubectl expose deployment selenium-hub --type=LoadBalancer --name=my-service, а затем kubectl describe services my-service.
Это должно сказать вам, была ли проблема с настройкой балансировки нагрузки.и к какому IP / хосту вы должны подключиться.

...