Тестирование с Headless Chrome

Подавляющее большинство тестировщиков знакомо с Selenium и успешно автоматизирует тесты с его использованием, и уж наверняка все знакомы с Google Chrome. Этот браузер я использую повседневно для ручного тестирования и доволен его функциональностью, но несмотря на это, в автоматизированном тестировании мой выбор пал в пользу Firefox.

Почему я использую Firefox

Этому предшествовало несколько событий в развитии Selenium. Так уж вышло что Firefox работал с selenium-standalone без дополнительных танцев с бубном. Достаточно было установить Firefox, скачать standalone пакет, запустить его в фоне и писать тесты, а в случае с python дело было еще проще. Чтобы автоматизировать тесты через Chrome, нужно было устанавливать chromedriver и запускать его через standalone пакет. Я решил попробовать и заметил что некоторые локаторы из тестов интерпретируются по другому, и как следствие такой переход потребует достаточно большой доработки тестов. Лень меня пересилила, использование Firefox меня вполне удовлетворяет и особых кросс-браузерных багов не наблюдаю. С недавних пор Firefox тоже требует внешнего файла драйвера. Но в силу того что первые релизы были не самыми надежными, я посчитал что можно использовать старую версию Firefox 46.0.1 и по прежнему использую ее. Такой компромисс между надежностью тестирования и опять же моей ленью.

Использование Headless браузеров

Еще хочу упомянуть про PhantomJS. Это одно из самых популярных на сегодня решений. Такой подход позволяет экономить ресурсы машины, т.к. не требуется рисовать UI, соответственно скорость тоже улучшается. А сами тесты будто проходят где-то в фоне, словно юнит-тесты. Складывается ощущение, легкости и удобства. Отчасти это так и есть, но PhantomJS далек от совершенства и может показать страницу отличающуюся от полноценного браузера. Возможно сейчас ситуация улучшилась, но я пришел к этому выводу обжигаясь не один раз, а дважды, надеясь на обновления версий. Поэтому использовать его просто не вижу смысла, тесты в итоге меня подводят.

Почему Headless Chrome

Теперь в свете выхода Headless Chrome я искренне надеюсь на возможность полного перехода. Я не решился на Chrome раньше, но лучше повода, чем сейчас придумать сложно. Мои надежды связаны с двумя плюсами от перехода, это легкость PhantomJS и точность браузера, который уже давно стал стандартом для всех остальных. Кстати в статье описывающей новую возможность Сhrome, упоминается что headless режим очень похож на то как работает PhantomJS, с тем лишь отличием что использует более новый движок Blink, в то время как «Фантом» работает на WebKit.

Чтобы запустить тесты с Headless Chrome нужно:

  • Chrome 59+ (Windows 60+)
  • ChromeDriver 2.30+

Посмотрим на реальных условиях

Проверять разницу я буду на локальной машине под управлением macOS Sierra. Прогонять буду существующие тесты на Codeception, с довольно старым selenium-standalone 2.53.0

acceptance.suite.yml

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

Запускаем selenium-standalone

Запускаем тесты и смотрим результат. Чтобы результат был наглядным, я сравнил 3 браузера. Тесты выполнялись несколько раз в каждом браузере, и здесь я привожу один из средних результатов.

Firefox 46.0.1

codeception тесты в браузере firefox

Chrome 59.0.3071.109

codeception тесты в браузере chrome

Chrome59.0.3071.109 —headless

codeception тесты в браузере headless chrome

Результаты мне очень понравились, времени потребовалось значительно меньше, и это только один тест сет. И я уверен тут есть пространство для оптимизации самих тестов под Chrome.

Ограничения тестирования

Из того что мне известно, пока невозможно использовать acceptPopup и cancelPopup. Но вполне вероятно что это будет исправлено в последующих версиях. Апдейт — натолкнулся на еще один костыль. Chrome 59+ нельзя установить нормальным способом на Ubuntu 12.04, есть только костыльные решения.

Что дальше

Дальше в моих планах переключить тесты в TeamCity на использование chrome headless. Надеюсь я получу прирост в скорости, разгружу ресурсы сервера и откажусь от Xvfb.

10 Комментарии

  1. Шёл 2017-й год, какая ubuntu 12.04?

    • Андрей Ким

      22.06.2017 в 18:02

      С — Стабильность =). Буквально до сегодня ни с чем подобным не сталкивался, вот и использовал.

  2. Александр

    11.07.2017 в 11:57

    интересная статья спасибо

    • Андрей Ким

      11.07.2017 в 18:16

      Рад что кому то интересно =)

      • Александр

        11.07.2017 в 19:48

        Подписался на Вас. Если я могу хоть как то поддержать проект, напишите мне.

        • Андрей Ким

          12.07.2017 в 11:50

          Задавайте вопросы, предлагайте темы для статей, буду очень рад новым комментариям.

  3. Александр

    18.07.2017 в 09:46

    Мне интересно, какими способами можно измерить перфоманс тестов(ЦПУ,ОЗУ,time) в режиме headless, скажем на ВМ. Пробобовал через перфоманс монитор на винде. Есть еще варианты, с помощью каких инструментов можно точнее собрать статистику?

    • Андрей Ким

      18.07.2017 в 19:56

      Если вы используете CI, к примеру я использую TeamCity у меня есть встроенная возможность мониторить перфоманс и скорость прогона тестов, думаю для Jenkins тоже есть что-то подобное или как минимум плагин. Постараюсь написать про это отдельно.

  4. Алексей

    31.03.2018 в 03:58

    Андрей, подскажите — как открыть Хром в headless режиме,
    открыть в нем страницу, и не закрывать, и периодически выполнять какой либо скрипт?

Добавить комментарий