Selenium за 60 секунд
Подаю вам переклад моєї статті на Medium.com.
Selenium сьогодні є стандартом де-факто для автоматизації виконання тестів у браузерах. Всі популярні браузери підтримуються із коробки, а архітектура добре відома. Існують навіть компанії, які надають Selenium за гроші. Але чи звичайний Selenium сервер для локальної налагодження тестів?

Як веб-розробник або інженер з автоматизації тестування ви можете зіткнутися з такими незручностями при роботі зі стандартним сервером Selenium:
Наведений вище перелік недоліків не повний. Але давайте зупинимося на цьому і спробуємо набагато зручний спосіб налагодження Selenium-тестів локально.
У моїй попередній статті (частина I, частина II) я коротко описав нові відкриті інструменти для роботи з Selenium: Ggr та Selenoid.Ggr в основному потрібен для великих кластерів Selenium і не потрібен для налагодження тестів на вашій машині. Сьогодні я детальніше розповім проSelenoid — альтернативну реалізацію Selenium хаба, яка запускає браузери в Docker контейнерах.
Але чому ж запуск браузерів у контейнерах такий зручний? І в чому різниця між запуском браузерів із контейнерів, що постачаються розробниками Selenium та Selenoid? — Основна ідея Selenoid полягає в тому, щоб запускати новий контейнер для кожної Selenium сесії (тобто запиту нового браузера) та зупиняти їх одразу після закриття сесії. Такий підхід відразу ж вирішує всі проблеми, пов'язані із залипанням стану в кешах і використання одних налаштувань браузера в різних сесіях. У кожному контейнері міститься конкретна версія браузера, правильна версія веб-драйвера або Selenium сервера, що підтримує цей браузер і всі залежності на кшталт шрифтів, графічних бібліотек татак далі. Більше того, контейнери забезпечують достатній рівень ізоляції процесів браузерів. Це дозволяє запускати необмежену кількість різних версій браузерів паралельно і забути про проблеми з фокусом. Безумовно, ці проблеми вирішуються і звичайними Selenium контейнерами. Але для того, щоб отримати поведінку, аналогічну Selenoid, на додаток до Docker зазвичай потрібно використовувати складні адмінські інструменти на зразок Ansible або Salt.
Встановити Docker. Зазвичай це робиться за допомогою стандартного менеджера пакетів вашої операційної системи, такого як APT, Yum або Homebrew. Подробиці можна знайти у документації Docker.
Створити каталог для зберігання конфігурації Selenoid та згенерувати конфігураційний файл:
Остання команда також скачає образи Docker-контейнерів двох останніх версій Firefox, Chrome та Opera та згенерує правильний файл конфігурації для Selenoid.
Все пройшло 60 секунд і Selenoid готовий до роботи. Не потрібно встановлювати Java та завантажувати Selenium руками. Просто запустіть свої тести, використовуючи той же URL, що і у звичайного Selenium server:
Мордочка та збір статистики
Selenoid може використовуватися спільно з Ggr для налаштування великого Selenium кластера, тому він не має графічного інтерфейсу на кшталт Grid Console у звичайному Selenium. Подивитися споживання браузерів можна двома способами:
I. Запустити додатковий легковажний контейнер із Selenoid UI. Це робиться командою:

ІІ. Надсилати статистику Selenoid у зовнішню систему: Graphite, InfluxDB, ElasticSearch і так далі. Статистика Selenoid може бути отримана за наступним URL:
Дані надсилаються у вигляді JSON наступного формату:
Готові контейнери з браузерами
Погодьтеся, круто мати інструмент, який автоматично запускає контейнери з різними браузерами. Але ще крутіше мати набір готових контейнерів із різними версіями популярних браузерів. Ми проробили багато роботи та підготували образи контейнерів з різними версіями Firefox, Chrome та Opera. Повний список можна переглянути на selenoid@DockerHub.
Щоб завжди мати набір нових версій браузерів потрібно лише час від часу виконувати команду:
Ця команда автоматично завантажує останні версії контейнерів та генерує нову JSON-конфігурацію для Selenoid. Щоб почати використовувати нові браузери, відправте Selenoid команду на перечитування конфігурації (можна робити під навантаженням):
Наші контейнери також підтримують можливість встановлення довільно роздільної здатності екрану (за замовчуванням 1920x1080x24). Щоб виставити дозвіл, просто передайте capability screenResolution :
Висновок
У цій статті я розповів, як ефективно керувати різними браузерами за допомогою Selenoid. Повірте – робота з Selenium може бути комфортною. Якщо вам цікаві питання побудови ефективної інфраструктури тестування, ви можете подивитись інші відкриті інструменти в нашій організації на Github або підпишіться на наш Твіттер @aerokube.
Хардкорна конфа за С++. Ми запрошуємо лише профі.