[Перевод] Headless тестирование в браузере. Плюсы и минусы

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

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

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

-mqnau1lr0ymegsjxz8i_ej7qvy.png

Почему вам может понадобиться использовать 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 браузер, поскольку он быстрее, а быстрее в вопросах тестирования — значит, лучше»

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

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

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

© Habrahabr.ru