Использование Docker с Selenium и Pytest для запуска параллельных тестов

Я пытаюсь использовать все эти вещи вместе для запуска параллельных тестов в Chrome без головы:

Докер, Селен, Пыт

Однако мне интересно, где имеет смысл запускать параллельную часть системы?

Docker может сделать это (используя селеновую сетку). Оба они могут быть использованы для запуска параллельных (и распределенных) тестов селена. например

https://github.com/elgalu/docker-selenium

https://github.com/zalando/zalenium

Также у Pytest есть собственный способ запуска параллельных тестов (с использованием pytest-xdist), например

http://pytest.org/dev/xdist.html

Будет ли проще запустить 10 параллельных pytest-xdist, чем 10 докеров?

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

Кроме того, есть идеи, как использовать эти вещи вместе? Информация об этом кажется очень скудной.

1 ответ

Однако мне интересно, где имеет смысл запускать параллельную часть системы?

Каждая часть будет способствовать параллелизму. Вам нужен Selenium HUB для организации доступных браузеров для запуска теста. У вас может быть n браузеров, работающих в автономном режиме, каждый из которых изолирован в своем собственном контейнере.

Будет ли проще запустить 10 параллельных pytest-xdist, чем 10 контейнеров докеров?

Pytest будет распараллеливать выполнение теста за вас, но не создание экземпляров и оркестровку для доступных браузеров.

Резюмируя:

Проблема: вам нужно запускать тесты UI (Selenium) параллельно. Для выполнения этого теста вам понадобится N доступных браузеров.

Решение: вы можете запустить N узлов безголового хрома из докера. Проблема: у вас есть 10 различных вариантов подключения, которые вы можете предоставить своим драйверам в ваших тестах.

Решение: запустите selenium hub и позвольте ему управлять этим за вас. Таким образом, вам нужно иметь дело только с одной точкой подключения, и тогда вам будет предоставлен браузер, который может запустить этот тест.

Проблема: вы сейчас запускаете тесты, и используется только один браузер. Решение: используйте xdist, чтобы указать pytest выполнять X тестов за раз. X в этом случае может соответствовать количеству N доступных браузеров.

Вы создаете столько контейнеров, сколько вам нужно / тогда вам нужно, чтобы вы знали xdist IP-адресов контейнеров, и если вам нужны UI-тесты, то у pytest есть pytest-splinter, а если вам нужны сценарии bdd, вы можете использовать pytest-bdd.

Другие вопросы по тегам