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

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

Инструменты - 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

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

 

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

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 агент запускал ваши тесты не под системным процессом, а под конкретным пользователем, опции которого можно настроить. Это не сильно принципиально, но ряд вещей позволит упростить (особенно, если вы потом захотите запускать тесты под ИЕ, например).

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

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

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

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

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

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