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

Selenium Grid - как перенести driver файлы на удаленную машину

remote
ci
selenium-grid
selenium
webdriver
Теги: #<Tag:0x00007f7b607d6e68> #<Tag:0x00007f7b607d6c88> #<Tag:0x00007f7b607d6ad0> #<Tag:0x00007f7b607d6990> #<Tag:0x00007f7b607d6710>

(Ilya G) #1

Всем доброго времени суток.

есть маленький фреймворк использующий Selenium, тесты можно запускать локально или через грид, driver файлы - часть проекта (nuget пакеты).
Локально все работает, но через грид файлы приходится закидывать через CI или руками.

можно ли через селениум сервер эти файлы передать?
как вы решаете подобную задачу?

Спасибо.


(Funker) #2

У нас в проэкте эти файлы лежат, да и, думаю, в большестве проэтов все в ресурсах проэктов лежит


(Sergey Pirogov) #3

Все хранится в ресурсах и в гите


(Ilya G) #4

Перефразирую мой вопрос:
Вот у нас есть прототип среды - Selenium Grid + Docker + Jenkins.

Есть хаб, и Дженкинс знает о нем, но он не знает ничего о нодах (это не нужно, так как это ответственность селениум сервера на хабе).
И вот ситуация - обновился файл хром драйвера, нужно руками на всех нодах обновлять, а можно ли с помощью селениум сервера их деплоить на нодах?


(Oleg Kuzovkov) #5

Деплоить нужно на selenium/node-chrome контейнере, а потом просто с него развернуть нужное количество. Хотя сам селениум и следит за обновление драйвера, не так ли?


(Funker) #6

Если коротко и без воды то нет! Это не есть цель и обязанность Selenium, там нужно просто контейнер обновить, или самому строить свой контейнер и тогда там уже ставить ту версию которую нужно.


(Ilya G) #7

Не совсем согласен, да это не обязанность selelnuim, но это обязанность фреймворка, если driver файлы это часть проекта.
Это вопрос встал после обновления до FF47,так как он работает теперь с geckodriver.
В нашей команде поддержкой докер занимается другая команда, и дергать их каждый раз не хочется для того что бы обновить файл драйвера.
У нас большая компания, и наш Selenium фреймворк имеет несколько версий, и есть старые версии которые работают со старыми драйвер файлами, просто так обновится не всегда получается, так как надо убедится что все тесты не сломались из за обновления, требует время.
Пример - локально все работает , так как Driver файлы часть проекта, но когда запускаю удаленно тесты падают, так как там другая версия driver файла, но обновить образ я просто так не могу, так как это может повилять на другие команды.
Если файл это часть проекта, то я не должен хранить его где то еще(в данном случае на образе докера).

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


(Sergey Korol) #8

Все образы docker-selenium доступны в паблик доступе. Чем там ваша другая команда занимается?

Даже если на минуточку представить, что у вас кастомная сборка грида. Наверняка она лежит где-то в репозитории компании. Не вижу проблемы создать форк с бранчем, внести нужные модификации, и использовать уже измененную версию.

Как уже выше написали, драйвера тянутся в процессе билда образа из официальных источников. Нужна кастомизация - модифицируем образы.

Это как бы в “генах” докера заложено - предоставить возможность управления различными версиями софта с минимальными телодвижениями. У вас может быть хоть десяток разных сборок одного и того же продукта на одной тачке. Используйте хоть какую-то конкретную, хоть все сразу. Docker вас в этом не ограничивает.

Ваша затея с потенциальной пересылкой драйвера средствами грида в любом случае подразумевает модификацию standalone сервера, которая в свою очередь приведет к неизбежной модификации Docker образов. Так что при любых раскладах вмешательство в образы неизбежно.

В качестве альтернативы вы конечно можете замапить фолдер хост машины с местоположением драйвера в контейнере, на лету подсовывая новую версию. Но если сам docker image поднимается удаленно, вам все равно придется закидывать хосту новый драйвер средствами скриптов или deployment софта по типу chef / puppet / ansible.

Касательно пересылки файлов в целом, это не задача хаба. У нас для таких целей поднимался микросервис, генерирующий файлы на хост машине. При этом, output folder был замаплен со всеми контейнерами, что позволяло нодам без проблем видеть соответствующие файлы в процессе запуска.

Как не крути, вам в любом случае придется вмешиваться в инфраструктуру - либо грида, либо контейнеров, либо хост машины. По взмаху волшебной палочки версии сами по себе не обновятся, ровно как и файлы - не загрузятся.


(Ilya G) #9

Большое спасибо за развернутый ответ:)