Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Ошибки при запуске тестов на Teamcity


(Alex.The.Test) #1

Всем доброго дня.

Инструменты - Selenium WebDriver + C# + Specflow.

В ходе разработки тестов столкнулся с такой проблемой:

Есть набор тестов - запускается пока только в Файрфоксе. Локально он проходит - все тесты в статусе passed.

При запуске этого же набора тестов на Teamcity сервере - очень часто (а самое главное случайно) получаю ошибки двух типов:

1. OpenQA.Selenium.WebDriverException: Unexpected error. System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full 127.0.0.1:7055 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)

2. OpenQA.Selenium.WebDriverException: No response from server for url http://localhost:7055/hub/session/dc89c1ae-3099-4886-88f7-58740cb8ed68/element/%7Bdc88d043-4ed3-4196-9baa-86317f47882e%7D/name

Вопрос к форумчанам - сталкивались ли Вы с такого рода ошибками и как их преодолеть?

 


(KaNoN) #2

Буквально первые несколько запросов в гугле выдали вот такое:

http://stackoverflow.com/questions/10013898/unable-to-connect-to-host-127-0-0-1-on-port-7055

http://stackoverflow.com/questions/12588082/webdriver-unable-to-connect-to-host-127-0-0-1-on-port-7055-after-45000-ms

Народ походу жалуется на совместимость версий WebDriver-а и Firefox.  Тут уже нужно смотреть, насколько свежая версия браузера и насколько свежая версия драйвера.

Если учесть, что такая ошибка возникает не всегда, а относительно спонтанно, то имеет смысл проверить еще несколько вещей. Например:

  • Удостоверьтесь, что каждый тест по завершении вызывает метод драйвера quit. Точнее, количество инициализаций ВебДрайвера совпадает с количеством его закрытий.  Учитывая, что используется SpecFlow, это вполне вероятный случай. В хуках такую инструкцию добавить нетрудно
  • По умолчанию TeamCity запускает тесты под системным процессом. Соответственно, если вам надо максимально приблизить условия работы на удаленной машине к условиям на вашей локальной машине, то надо бы позаботиться, чтоб TeamCity агент запускал ваши тесты не под системным процессом, а под конкретным пользователем, опции которого можно настроить. Это не сильно принципиально, но ряд вещей позволит упростить (особенно, если вы потом захотите запускать тесты под ИЕ, например).

(Alex.The.Test) #3

Огромное спасибо за ответ!

Насчет обновления версий Селениума и ФайрФокса - сегодня обновлю и отпишусь решилась ли проблема или нет.

Насчет того, чтобы после каждого теста вызывать метод quit - нужно ли это делать и насколько это целесообразно? Плюс в этом - отсутствие приведенных мной выше ошибок, минус - увеличение времени выполнения тестов.

На данный момент я делаю quit() после всего тест рана.

В принципе на основе хуков в Спекфлоу легко можно сделать так, чтобы только в случае фейла теста выполнялся quit() и драйвер инициализировался заново.


(KaNoN) #4

В интенсивности использования quit важно как минимум, чтобы количество вызовов quit совпадало с количеством инициализаций Веб Драйвера.  Я предпочитаю такую остановку делать после каждого теста. Больших потерь времени от этого нет, а если это еще и позволит избавиться от ряда проблем, то почему бы и не воспользоваться этим.