И снова здравствуйте. Данная публикация приурочена к запуску курса «Автоматизация веб-тестирования», который стартует уже на этой неделе. Приятного прочтения!

Что такое Headless тестирование?

Headless тестирование представляет собой запуск в браузере теста на работоспособность каких-либо составляющих UI без отображения этого самого UI. Такое тестирование запускает скрипты в браузере, но не запускает и не показывает сам по себе UI.



Почему вам может понадобиться использовать Headless-браузеры? У этого подхода есть множество плюсов и минусов. Использование headless браузера может быть не очень полезным для серфинга в сети, но для автоматизации задач и тестирования он незаменим.

Почему стоит использовать headless browser?

Следовать за деньгами – это клише, однако я все же считаю, что это ключевой индикатор появления трендов, а следовательно того, на что обязательно надо обратить внимание. Например, Sauce Labs только что выпустила новый сервис под названием Sauce Headless, облачное решение для headless тестирования ваших решений.

Я знаю, что люди в Sause – это умные люди. Они не будут ничего разрабатывать просто так. Им необходимо получить обратную связь от пользователей, чтобы понять, что какой-либо функционал является необходимым.

Я уверен, что они не будут одиноки в своем стремлении развивать headless тестирование.
По мере того, как мы продвигаемся дальше по жизненному циклу разработки программного обеспечения, тестировщикам необходимо быстрее и быстрее выдавать обратную связь разработчикам. Один из способов этого добиться – это проводить быстрые проверки headless браузером.

Автоматизация в разработке программного обеспечения

Я всеми руками «за» автоматизацию, но автоматизация это не только про тестирование.
Это история про все аспекты, которые вы можете автоматизировать, чтобы сохранить время или усилия в жизненном цикле разработки программного обеспечения, контроля качества или тестирования, DevOps или установки. Headless браузеры являются одним из мощных средств автоматизации.

Headless браузеры быстрее обычных браузеров

Одно из важнейших отличий headless браузеров от обычных браузеров – это скорость их работы. Дело в том, что, когда вы загружаете страницу в браузере без GUI, ему не нужно тратить время на загрузку CSS, JavaScript и рендеринг HTML.

Я бы не сказал, что разница будет колоссальной, однако в некоторых случаях можно проследить увеличение скорости в два раза или даже в 15. Таким образом, если вам важна производительность, то headless браузер будет хорошим выбором.

Скрапинг с помощью headless браузера

Другое преимущество headless браузеров заключается в их способности собирать данные с веб-сайтов. Чтобы это сделать, вам не придется вручную запускать браузер. Вы можете использовать headless технологию, чтобы просто скрапить HTML. И рендерить весь браузер совершенно не обязательно.

Скажем, что в вашем кейсе требуется спортивная статистика или сравнение цен на различных сайтах.

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

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

Сохранить время разработчиков

Я знаю, что много разработчиков используют headless браузеры для модульного тестирования своих сайтов и приложений. Возможность использовать его из командной строки без ручного обновления или запуска браузера сохраняет им много времени и усилий. Например, Роб Фризел, автор PhantomJS CookBook в интервью TestTalks пояснил, почему его разработчики используют headless браузер PhantomJS:
«Несмотря на то, что сам по себе PhantomJS не является фреймворком для тестирования, однако он является полезным «лучиком света в угольной шахте», который придает уверенности; если все тесты пройдены, то вы становитесь гораздо увереннее в том, что ваш код действительно хорош.»
Мониторинг производительности с помощью скриптов Headless браузера

Еще один вариант использования headless браузера – это мониторинг производительности сетевых приложений.

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

Я думаю, это одна из причин, по которой Google разработал новый headless Chrome API, который называется Puppeteer. Он нацелен в первую очередь на помощь разработчикам.

Основные идеи Headless браузер тестирования

Помимо предыдущей идеи, есть также и другие варианты использования headless браузеров, о которых я вам сейчас и расскажу:

  1. Запускать тесты на машине без монитора;
  2. Настройка данных;
  3. Тестирование SSL;
  4. Симуляция множества браузеров на одной машине;
  5. Запуск тестов на headless системе, как например Linux без GUI;
  6. Получение и визуализация PDF-файлов;
  7. Тестирование разметки, поскольку headless браузеры могут рендерить HTML и CSS, как полноценные браузеры, соответственно вы можете тестировать ими стили.

Случаи, когда вам не захочется использовать Headless браузер

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

  1. Вам нужно имитировать реальных пользователей;
  2. Вам нужно видеть, как отрабатывает тест;
  3. Если вам нужно проводить дебаг, это может быть сложно с headless браузером.

Популярные Headless браузеры

  1. Google Puppeteer – Headless браузер Puppeteer это библиотека Node. Он обеспечивает высокоуровневое API для управления headless Chrome или Chromium с помощью протокола DevTools. Его также можно настроить для использования полноценного (non-headless) Chrome или Chromium.
  2. Google Chrome с версии 59;
  3. Firefox версии 55 и 56;
  4. PhantomJS – headless webkit на JavaScript API. У него есть быстрая и нативная поддержка для различных веб-стандартов: обработка DOM дерева, CSS селекторы, формат JSON, Canvas и SVG. * Сейчас он не поддерживается. Из-за этого вам может не захотеться его использовать.
  5. HtmlUnit – это браузер без GUI под Java код. Он моделирует HTML документы и предоставляет API, который позволяет открывать страницы, заполнять формы, нажимать на ссылки и т.д. Также, как и в вашем «обычном» браузере.
  6. Splinter – Splinter – это headless браузер, ориентированный на Python. Он имеет открытый исходный код и используется для тестирования веб-приложений с использованием Python. Например, вы можете использовать его для автоматизации действий браузера, таких как посещение веб-страниц и взаимодействия с их элементами.
  7. jBrowserDriver – Программируемый, встраиваемый драйвер веб-браузера, совместимый с Selenium WebDriver spec – headless, основанный на WebKit, на чистой Java.

Когда следует использовать headless браузер для тестирования?

Ответ на этот вопрос зависит от целей вашего тестирования.

С одной стороны, люди часто говорят: «Никогда не используйте headless браузеры. Реальный пользователь никогда не будет им пользоваться, так почему вы должны?» Хотя, с другой стороны, мы слышим: «Вам следует всегда использовать headless браузер, поскольку он быстрее, а быстрее в вопросах тестирования – значит, лучше»

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

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

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

Комментарии (7)


  1. roryorangepants
    18.03.2019 16:46

    Это уже вторая ваша статья по QA, которая почему-то помечена хабом «Машинное обучение».


    1. MaxRokatansky Автор
      18.03.2019 16:49

      Оуч. Спасибо, поправили. На автомате вышло


  1. iLq
    18.03.2019 18:06

    Довольно сумбурно, но суть я уловил. Буду пробовать.


  1. barancev
    19.03.2019 11:27

    Интересно, откуда Джо взял этот бред про ускорение от 2x до 15x? Firefox и Chrome в headless режиме работают ровно с такой же скоростью, как и в обычном режиме, отличия в рамках статистической погрешности. PhantomJS работал на многих сайтах даже медленнее, чем Chrome, потому что использовал более медленный JS-движок. Реального ускорения можно добиться разве что при использовании HtmlUnit, но он половину JS не может нормально выполнить.

    (Puppeeter работает реально быстрее всех инструментов, основанных на WebDriver, потому что там другой протокол, но сейчас пока его можно использовать только для локального запуска, так что в e2e тестировании он пока не слишком распространён)


  1. nikolau
    19.03.2019 17:11

    Вам нужно имитировать реальных пользователей;

    Получается, с помощью headless браузера парсить выдачу поисковиков не получится, он будет быстро банить?


  1. kahi4
    19.03.2019 18:35
    +1

    Одно из важнейших отличий headless браузеров от обычных браузеров – это скорость их работы. Дело в том, что, когда вы загружаете страницу в браузере без GUI, ему не нужно тратить время на загрузку CSS, JavaScript и рендеринг HTML.

    С чего вдруг? Если вам не нужно загружать css, javascript и рендерить html — вам вообще не нужен браузер для тестов. Хедлесс браузеры все прекрасно рендерят. Если попробовать "кликнуть" кнопку, перекрытую каким-то элементом сверху, кнопка не кликнется. И js ровно так же будет выполняться.


    Отсюда


    Случаи, когда вам не захочется использовать Headless браузер

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

    Вам нужно имитировать реальных пользователей;
    Вам нужно видеть, как отрабатывает тест;
    Если вам нужно проводить дебаг, это может быть сложно с headless браузером.

    Неправда. Реальных пользователей имитировать очень просто, в том то и преимущество headless браузеров, что они работают как обычные, но не требуют графической оболочки, а тесты можно писать в виде "кликни эту кнопку, вбей этот текст сюда". Более того, часть библиотек для тестирования позволяют записать свое поведение и потом воспроизводить его.


    Увидеть как работает тест можно а: сделав скриншоты и сохранив их в папку в ключевые момеенты, б: запустить тест в обычном браузере (опять же, в большинстве библиотек для тестов, в том же cypress, для этого нужно только один флаг поменять).


    С дебагом никаких проблем нет, покуда существует remote debug protocol, с ним все прекрасно дебажится (сборку иногда геморно настраивать для фронта).


    Другое преимущество headless браузеров заключается в их способности собирать данные с веб-сайтов. Чтобы это сделать, вам не придется вручную запускать браузер. Вы можете использовать headless технологию, чтобы просто скрапить HTML. И рендерить весь браузер совершенно не обязательно.

    И хедлес браузер тоже использовать не обязательно, через curl HTML можно забрать.


    До пункта "Популярные Headless браузеры" я был уверен, что автор путает понятие HTML движка (который строит DOM-дерево и позволяет быстро искать в нем, к примеру, селекеторами jQuery, например jsdom ), но в итоге статья представляет из себя бесполезную и неправдивую приписку к рекламе курса.


    Еще один вариант использования headless браузера – это мониторинг производительности сетевых приложений.

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


  1. ivanych
    21.03.2019 15:31

    Статья абсолютно безграмотная, автор не понимает, что такое headless-браузер.


    Коллега kahi4 выше всё подробно расписано. От себя хочу добавить, что статья вызывает только один вопрос — рекламируемый в статье курс обучения такой же бестолковый?