Что такое безголовый браузер
Обновлено: 21.11.2024
В этой статье независимый разработчик JavaScript из Toptal Ник Чиковани показывает, как легко выполнять парсинг веб-страниц с помощью автономного браузера. В частности, он предоставляет руководство по Puppeteer, в котором приводится несколько примеров того, как управлять Google Chrome, чтобы делать снимки экрана и собирать структурированные данные.
Имея более чем шестилетний опыт работы в качестве разработчика и руководителя группы, Ник страстно любит разработку надежного, масштабируемого и чистого кода.
В этой статье мы увидим, как легко выполнять веб-скрапинг (веб-автоматизацию) с помощью несколько нетрадиционного метода использования безголового браузера.
Что такое безголовый браузер и зачем он нужен?
За последние несколько лет Интернет превратился из упрощенных веб-сайтов, созданных с использованием только HTML и CSS. Сейчас гораздо больше интерактивных веб-приложений с красивым пользовательским интерфейсом, которые часто создаются с помощью таких фреймворков, как Angular или React. Другими словами, в настоящее время JavaScript правит Интернетом, включая почти все, с чем вы взаимодействуете на веб-сайтах.
Для наших целей JavaScript – это клиентский язык. Сервер возвращает файлы или сценарии JavaScript, внедренные в ответ HTML, и браузер обрабатывает их. Теперь это проблема, если мы делаем какой-то просмотр веб-страниц или веб-автоматизацию, потому что в большинстве случаев контент, который мы хотели бы увидеть или очистить, фактически отображается кодом JavaScript и недоступен из необработанного HTML-ответа. которые предоставляет сервер.
Как мы упоминали выше, браузеры знают, как обрабатывать JavaScript и отображать красивые веб-страницы. А что, если бы мы могли использовать эту функциональность для наших нужд в скрейпинге и имели бы способ программно управлять браузерами? Именно здесь на помощь приходит автоматизация безголового браузера!
Без головы? Простите? Да, это просто означает отсутствие графического пользовательского интерфейса (GUI). Вместо обычного взаимодействия с визуальными элементами, например с помощью мыши или сенсорного устройства, вы автоматизируете варианты использования с помощью интерфейса командной строки (CLI).
Безголовый Chrome и Puppeteer
Существует множество инструментов веб-скрейпинга, которые можно использовать для автономного просмотра, например Zombie.js или безголовый Firefox с использованием Selenium. Но сегодня мы будем изучать безголовый Chrome через Puppeteer, так как это относительно новый проигрыватель, выпущенный в начале 2018 года. Примечание редактора: стоит упомянуть удаленный браузер Intoli, еще один новый проигрыватель, но это должно быть тема для другой статьи.
Что такое Кукловод? Это библиотека Node.js, которая предоставляет высокоуровневый API для управления безголовым Chrome или Chromium или для взаимодействия с протоколом DevTools. Он поддерживается командой Chrome DevTools и отличным сообществом разработчиков открытого исходного кода.
Хватит говорить — давайте перейдем к коду и узнаем, как автоматизировать просмотр веб-страниц с помощью автономного просмотра Puppeteer!
Подготовка среды
Прежде всего на вашем компьютере должен быть установлен Node.js 8+. Вы можете установить его здесь, или, если вы любитель CLI, как и я, и хотите работать в Ubuntu, выполните следующие команды:
Вам также понадобятся некоторые пакеты, которые могут быть доступны или недоступны в вашей системе. На всякий случай попробуйте установить их:
Настройка Headless Chrome и Puppeteer
Я бы порекомендовал установить Puppeteer с npm , так как он также будет включать стабильную актуальную версию Chromium, которая гарантированно будет работать с библиотекой.
Выполните эту команду в корневом каталоге вашего проекта:
Примечание. Это может занять некоторое время, так как Puppeteer потребуется загрузить и установить Chromium в фоновом режиме.
Хорошо, теперь, когда мы все установили и настроили, начнем самое интересное!
Использование Puppeteer API для автоматического парсинга веб-страниц
Давайте начнем наше руководство по Puppeteer с простого примера. Мы напишем скрипт, который заставит наш автономный браузер сделать снимок экрана выбранного нами веб-сайта.
Создайте новый файл в папке проекта с именем screenshot.js и откройте его в своем любимом редакторе кода.
Для начала давайте импортируем библиотеку Puppeteer в ваш скрипт:
Далее возьмем URL из аргументов командной строки:
В целом окончательный код выглядит так:
Вы можете запустить его, выполнив следующую команду в корневом каталоге вашего проекта:
Подождите секунду, и бум! Наш безголовый браузер только что создал файл с именем screenshot.jpg, и вы можете увидеть в нем домашнюю страницу GitHub. Отлично, у нас есть рабочий парсер Chrome!
Давайте остановимся на минуту и посмотрим, что происходит в нашей функции run() выше.
Сначала мы запускаем новый экземпляр автономного браузера, затем открываем новую страницу (вкладку) и переходим по URL-адресу, указанному в аргументе командной строки. Наконец, мы используем встроенный метод Puppeteer для создания снимка экрана, и нам нужно только указать путь, по которому его следует сохранить.Нам также необходимо обязательно закрыть автономный браузер после того, как мы закончим с нашей автоматизацией.
Теперь, когда мы рассмотрели основы, давайте перейдем к чему-то более сложному.
Второй пример очистки кукольника
Для следующей части нашего руководства по Puppeteer предположим, что мы хотим извлечь самые свежие статьи из Hacker News.
Создайте новый файл с именем ycombinator-scraper.js и вставьте в него следующий фрагмент кода:
Хорошо, здесь происходит немного больше по сравнению с предыдущим примером.
Первое, что вы можете заметить, это то, что функция run() теперь возвращает промис, поэтому префикс async переместился в определение функции промиса.
Мы также поместили весь наш код в блок try-catch, чтобы мы могли обрабатывать любые ошибки, которые приводят к отклонению нашего обещания.
И, наконец, мы используем встроенный метод Puppeteer, который называется Assessment(). Этот метод позволяет нам запускать пользовательский код JavaScript, как если бы мы выполняли его в консоли DevTools. Все, что возвращается этой функцией, разрешается промисом. Этот метод очень удобен, когда нужно извлечь информацию или выполнить специальные действия.
Вывод скрипта выглядит примерно так (но изначально с 30 записями):
Я бы сказал, довольно аккуратно!
Хорошо, идем дальше. Нам вернули всего 30 товаров, а в наличии гораздо больше — они просто на других страницах. Нам нужно нажать кнопку «Дополнительно», чтобы загрузить следующую страницу результатов.
Давайте немного изменим наш скрипт, чтобы добавить поддержку нумерации страниц:
- Мы добавили единственный аргумент с именем pagesToScrape в нашу основную функцию run(). Мы будем использовать это, чтобы ограничить количество страниц, которые будет очищать наш скрипт.
- Есть еще одна новая переменная с именем currentPage, которая представляет номер страницы результатов, которые мы просматриваем в данный момент. Изначально установлено значение 1. Мы также заключили нашу функцию Assessment() в цикл while, чтобы она продолжала работать до тех пор, пока значение currentPage меньше или равно pagesToScrape .
- Мы добавили блок для перехода на новую страницу и ожидания загрузки страницы перед перезапуском цикла while.
Вы заметите, что мы использовали метод page.click(), чтобы автономный браузер нажимал кнопку "Дополнительно". Мы также использовали метод waitForSelector(), чтобы убедиться, что наша логика приостановлена до загрузки содержимого страницы.
Оба этих метода представляют собой высокоуровневые методы Puppeteer API, готовые к использованию сразу после установки.
Одна из проблем, с которой вы, вероятно, столкнетесь при парсинге с помощью Puppeteer, — это ожидание загрузки страницы. Hacker News имеет относительно простую структуру, и было довольно легко дождаться завершения загрузки страницы. Для более сложных случаев использования Puppeteer предлагает широкий спектр встроенных функций, которые вы можете изучить в документации по API на GitHub.
Все это довольно круто, но в нашем руководстве по Puppeteer оптимизация еще не описана. Давайте посмотрим, как мы можем ускорить работу Puppeteer.
Оптимизация нашего скрипта Puppeteer
Общая идея состоит в том, чтобы не позволять автономному браузеру выполнять какую-либо дополнительную работу. Это может включать загрузку изображений, применение правил CSS, запуск запросов XHR и т. д.
Как и в случае с другими инструментами, оптимизация Puppeteer зависит от конкретного варианта использования, поэтому имейте в виду, что некоторые из этих идей могут не подойти для вашего проекта. Например, если бы мы избегали загрузки изображений в нашем первом примере, наш снимок экрана мог бы выглядеть не так, как мы хотели.
Давайте сначала посмотрим, как работает кэширование.
Это должно дать нам хороший прирост производительности, так как большое количество CSS и изображений будет кэшироваться в каталоге данных при первом запросе, и Chrome не нужно будет загружать их снова и снова.
Однако эти ресурсы по-прежнему будут использоваться при отображении страницы. В наших потребностях в новостных статьях Y Combinator нам не нужно беспокоиться о каких-либо визуальных эффектах, включая изображения. Нас интересует только чистый HTML-вывод, поэтому давайте попробуем заблокировать каждый запрос.
К счастью, в данном случае с Puppeteer очень удобно работать, потому что он поддерживает настраиваемые хуки. Мы можем предоставить перехватчик для каждого запроса и отменить те, которые нам действительно не нужны.
Перехватчик можно определить следующим образом:
Как видите, у нас есть полный контроль над инициируемыми запросами. Мы можем написать собственную логику, чтобы разрешать или отменять определенные запросы в зависимости от их типа ресурса. У нас также есть доступ к большому количеству других данных, таких как request.url, поэтому мы можем блокировать только определенные URL-адреса, если захотим.
В приведенном выше примере мы пропускаем через наш фильтр только запросы с типом ресурса "документ", что означает, что мы будем блокировать все изображения, CSS и все остальное, кроме исходного ответа HTML.
Вот наш окончательный код:
Безопасность с ограничениями скорости
Безголовые браузеры — очень мощные инструменты. Они могут выполнять практически любые задачи веб-автоматизации, а Puppeteer делает это еще проще.Несмотря на все возможности, мы должны соблюдать условия использования веб-сайта, чтобы не злоупотреблять системой.
Поскольку этот аспект больше связан с архитектурой, я не буду подробно описывать его в этом руководстве по Puppeteer. Тем не менее, самый простой способ замедлить работу скрипта Puppeteer — добавить к нему команду sleep:
js ожидает page.waitFor(5000);
Эта инструкция переводит ваш скрипт в спящий режим на пять секунд (5000 мс). Вы можете поместить это в любом месте перед browser.close() .
Помимо ограничения использования сторонних сервисов, существует множество других более надежных способов контролировать использование Puppeteer. Одним из примеров может быть построение системы очередей с ограниченным числом работников. Каждый раз, когда вы хотите использовать Puppeteer, вы помещаете новую задачу в очередь, но только ограниченное количество рабочих может работать над задачами в ней. Это довольно распространенная практика при работе со сторонними ограничениями скорости API, и ее также можно применять для парсинга веб-данных Puppeteer.
Место кукловода в быстро меняющейся сети
В этом руководстве по Puppeteer я продемонстрировал его основные функции в качестве инструмента для веб-скрейпинга. Однако у него гораздо более широкие возможности использования, включая тестирование безголового браузера, создание PDF-файлов, мониторинг производительности и многое другое.
Понимание основ
Что вы подразумеваете под "безголовым браузером"?
Безголовый браузер — это веб-браузер без пользовательского интерфейса (UI). Вместо этого он следует инструкциям, определенным разработчиками программного обеспечения на разных языках программирования. Безголовые браузеры в основном используются для проведения автоматизированных тестов обеспечения качества или для очистки веб-сайтов.
Законно ли парсинг веб-сайта?
Веб-сайты часто позволяют другим программам очищать их содержимое. Пожалуйста, обратитесь к стандарту исключения роботов (файл robots.txt) веб-сайта, который вы собираетесь очищать, поскольку в нем обычно описывается, какие страницы вам разрешено очищать. Вы также должны проверить условия обслуживания, чтобы узнать, разрешено ли вам парсинг.
Что такое безголовая среда?
Безголовое означает, что данное устройство или программное обеспечение не имеет пользовательского интерфейса или механизма ввода, такого как клавиатура или мышь. Термин "безголовая среда" чаще используется для описания компьютерного программного обеспечения, предназначенного для предоставления услуг другим компьютерам или серверам.
Что такое безголовый Chrome?
Headless Chrome — это, по сути, веб-браузер Google Chrome без графического пользовательского интерфейса (GUI), основанный на той же базовой технологии. Вместо этого Headless Chrome управляется сценариями, написанными разработчиками программного обеспечения.
Что такое Google Puppeteer?
Puppeteer – это библиотека Node.js, поддерживаемая командой разработчиков Chrome из Google. Puppeteer предоставляет высокоуровневый API для управления Chrome или Chromium без дисплея или для взаимодействия с протоколом DevTools.
Является ли Selenium фреймворком?
Да, но не интерфейсный веб-фреймворк, такой как Angular или React; Selenium — это среда тестирования программного обеспечения для веб-приложений. Его основной вариант использования — автоматизация тестов обеспечения качества в автономных браузерах, но он также часто используется для автоматизации задач администрирования на веб-сайтах.
Короче говоря, безголовый браузер — это веб-браузер без графического пользовательского интерфейса (GUI). GUI включает в себя цифровые элементы, с которыми взаимодействуют пользователи, такие как кнопки, значки и окна. Но вам нужно знать гораздо больше о безголовом браузере.
В этой статье вы узнаете, что такое безголовый браузер, для чего он используется, что такое безголовый Chrome и какие другие браузеры наиболее популярны в безголовом режиме. Мы также обсудим основные ограничения автономного тестирования браузера.
Перейти к этой статье:
- Что такое безголовый браузер?
- Для чего используется автономный браузер?
- Самые популярные автономные браузеры
- Что такое автономное тестирование?
- Тестирование автономного браузера: ограничения
- Заключение
Что такое безголовый браузер?
Безголовый браузер – это веб-браузер без графического пользовательского интерфейса (GUI). Он в основном используется инженерами по тестированию программного обеспечения, потому что браузеры без графического интерфейса работают быстрее, поскольку им не нужно рисовать визуальный контент. Одним из самых больших преимуществ безголовых браузеров является их возможность работать на серверах без поддержки графического интерфейса.
Безголовые браузеры обычно запускаются через командную строку или по сети.
Для чего используется безголовый браузер?
Наиболее распространенный вариант использования автономных браузеров – тестирование веб-страниц. Безголовые браузеры легко понимают HTML-страницы и интерпретируют их так же, как и любой другой браузер.На них изображены элементы стиля, включая цвета, шрифты, макеты и т. д.
Итак, в чем польза безголового браузерного тестирования?
Безголовые браузеры используются для автоматизированных тестов, чтобы проверять формы отправки, щелчки мышью, ввод с клавиатуры и т. д. По сути, они включают в себя все, что можно автоматизировать для экономии времени и усилий на любом этапе цикла доставки программного обеспечения, включая разработку. , гарантия качества и установка. Автоматические тесты также можно запускать для библиотек JavaScript.
Безголовые браузеры могут отображать и интерпретировать элементы HTML и CSS точно так же, как настоящий браузер. Они используются для проверки макета, например, для определения ширины страницы по умолчанию и координат элементов. Безголовые браузеры также позволяют тестировать выбор цвета для различных элементов. Выполнение JavaScript и AJAX также можно протестировать. Разработчики часто автоматизируют снимки экрана в автономных браузерах, чтобы протестировать макет.
Производительность веб-сайта можно быстро проверить с помощью автономного браузера. Поскольку браузер без графического интерфейса загружает веб-сайты намного быстрее, задачи производительности, не требующие взаимодействия с пользовательским интерфейсом, можно протестировать с помощью командной строки. В таких задачах нет необходимости вручную обновлять страницы. Хотя это экономит время и силы, важно отметить, что только небольшие задачи производительности, такие как тесты входа в систему, могут быть проверены с помощью автономного браузера.
Когда дело доходит до просмотра веб-страниц и извлечения данных с помощью автономного браузера, часто нет необходимости запускать веб-сайт. Веб-скрапинг с помощью автономного браузера позволяет быстро перемещаться по веб-сайтам и собирать общедоступные данные.
Самые популярные безголовые браузеры
Одним из основных требований к безголовым браузерам является возможность работы с низким уровнем ресурсов. Браузер должен работать в фоновом режиме без существенного замедления других задач, выполняемых системой.
Разные автономные браузеры работают лучше в разных сценариях тестирования. По этой причине разработчикам часто приходится тестировать различные варианты, чтобы найти наилучшую комбинацию инструментов для своего случая. Вот некоторые из самых популярных безголовых браузеров и их основные функции:
Также стоит упомянуть Phantom JS, поскольку раньше он был популярным автономным веб-браузером. Многие разработчики сравнивали PhantomJS и HtmlUnit. Однако Phantom JS уже несколько лет не поддерживается. Это был открытый исходный код, поддерживаемый вкладом преданных своему делу разработчиков.
Что такое безголовое тестирование?
Безголовое тестирование – это процесс тестирования браузера без пользовательского или графического интерфейса браузера. Это означает, что, хотя этот метод проверяет компоненты, он пропускает часть, связанную с отрисовкой визуальных элементов.
Одна из важных причин для проведения автономного тестирования браузера – его способность быстрее запускать тесты в среде реального браузера. Однако хотя безголовое тестирование обеспечивает более быструю, простую и менее ресурсоемкую автоматизацию, оно также имеет свои ограничения, о которых мы рекомендуем всегда помнить.
Тестирование безголового браузера: ограничения
Безголовое тестирование имеет свои ограничения. Вот несколько примеров:
- Тестирование в безголовых браузерах может сместить внимание разработчиков на исправление ошибок, которые появляются только при использовании браузеров в автономной среде. Однако важно не забывать, что пользователи вряд ли когда-нибудь зайдут на сайт с безголовым браузером. Поэтому в первую очередь следует сосредоточиться на проблемах, которые появляются в обычном браузере.
- Во время автономного тестирования некоторые страницы загружаются слишком быстро, что затрудняет отладку противоречивых сбоев при поиске элементов.
Заключение
Безголовые браузеры работают намного быстрее, чем обычные браузеры, поскольку им не нужно загружать весь контент, необходимый для взаимодействия с пользователем.
Из-за высокой скорости безголовые браузеры часто используются для тестирования веб-страниц. Они используются для тестирования различных задач автоматизации на веб-сайте, его производительности и макета. Извлечение данных — еще один распространенный вариант использования автономных браузеров.
Некоторые из самых популярных веб-браузеров, включая Chrome и Mozilla Firefox, работают в автономном режиме.
Однако безголовые браузеры также имеют ограничения, и в некоторых случаях тестирование следует проводить в обычных браузерах.
Если вы хотите узнать больше о парсинге веб-страниц и сборе данных с помощью безголового браузера, ознакомьтесь с записью в нашем блоге. Парсинг веб-страниц с помощью Selenium: сделай сам или купи?
Об Аделине Киските
Аделина Киските — контент-менеджер в Oxylabs. Аделина постоянно следит за техническими новостями и любит пробовать новые приложения, даже самые бесполезные. Когда она не прикована к своему телефону, она также любит читать книги по самомотивации и биографии вдохновленных технологиями новаторов. Кто знает, может быть, однажды она создаст собственное приложение, которое изменит ее жизнь!
Вся информация в блоге Oxylabs предоставляется на условиях «как есть» и только в информационных целях.Мы не делаем никаких заявлений и отказываемся от любой ответственности в отношении использования вами любой информации, содержащейся в блоге Oxylabs или любых сторонних веб-сайтах, ссылки на которые могут быть в нем. Прежде чем приступать к парсингу любого рода, вам следует проконсультироваться со своими юридическими консультантами и внимательно прочитать условия обслуживания конкретного веб-сайта или получить лицензию на парсинг.
Тестирование без участия пользователя в браузере повышает как эффективность, так и результативность вашего процесса тестирования, а также интегрирует контроль качества с доставкой программного обеспечения.
В конце концов, единственными тестами, которые имеют значение, являются сквозные тесты, управляемые пользовательским интерфейсом. Это тесты, которые начинаются и заканчиваются интерфейсами приложения и доказывают, что приложение со всеми его событиями, очередями и микросервисами позволяет заинтересованным сторонам достичь всех своих целей.
Но при тестировании на основе пользовательского интерфейса возникают некоторые проблемы. Стабильность — это первое: даже когда приложение работает правильно, тесты пользовательского интерфейса иногда терпят неудачу при взаимодействии с браузером. Еще одна проблема — производительность: тестирование на основе пользовательского интерфейса оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооочень медленно по сравнению с другими видами автоматизированного тестирования.
Что такое тестирование безголового браузера?
Есть решение: безголовое тестирование браузера. Автоматизация безголового браузера использует веб-браузер для сквозных тестов, но пропускает загрузку пользовательского интерфейса браузера. Это означает, что тестируемая HTML-страница не визуализируется (поэтому все работает быстрее), и ваши тесты обходят взаимодействие со страницей, чтобы более напрямую манипулировать браузером (исключая сбои из-за взаимодействий, связанных с пользовательским интерфейсом). Ваши сквозные тесты более эффективны и надежны. Если производительность или стабильность являются причинами, по которым вы избегаете сквозного тестирования на основе пользовательского интерфейса, автоматизация безголового браузера может позволить вам добавить сквозные тесты в процесс тестирования.
Главные проблемы автоматизированного сквозного тестирования
Автоматизированное комплексное тестирование помогает создавать и поддерживать высококачественные приложения. Узнайте, какие проблемы больше всего влияют на сквозное тестирование, и узнайте, как их преодолеть.
Однако безголовое браузерное тестирование не следует рассматривать просто как замену тестированию пользовательского интерфейса. Безголовое браузерное тестирование открывает новые возможности, позволяя вам принять проектное мышление «сдвига влево» и перейти к интеграции контроля качества (QA) в ваш процесс доставки программного обеспечения (что называется «QAOps»). В результате «безголовое браузерное тестирование» не только делает ваше тестирование более эффективным, но и делает его более эффективным.
И, кстати, «безголовое тестирование браузера» — это слишком много. Давайте просто воспользуемся «безголовым тестированием».
Возможности
Проблемы со стабильностью и производительностью, связанные со сквозным тестированием на основе пользовательского интерфейса, означают, что сквозные тесты обычно выполняются реже, чем другие тесты — часто только в конце процесса разработки, непосредственно перед выпуском. как часть процесса обеспечения качества. Это приводит как минимум к двум неприятным последствиям: любые проблемы, обнаруженные при сквозном тестировании, обнаруживаются очень поздно в процессе тестирования, и возникает разделение между процессами доставки программного обеспечения и контроля качества.
Вот где вступает в действие автономный тест. Без вызова механизма рендеринга браузера автономный браузерный тест может выполняться в два-десять раз быстрее, чем эквивалентный тест на основе пользовательского интерфейса. Это улучшение скорости позволяет вам сместить сквозное тестирование влево, переместив его из предварительного тестирования в ночные тестовые прогоны — ваше тестирование становится более эффективным, позволяя разработчикам раньше выявлять и устранять проблемы. Если вы уже проводите сквозное тестирование в рамках ночного тестирования, у вас есть возможность высвободить ресурсы, которые в настоящее время поглощаются тестированием на основе пользовательского интерфейса, — ваше тестирование становится более эффективным.
Хотя чем быстрее, тем лучше, этот шаг возможен только потому, что безголовое тестирование в обход пользовательского интерфейса браузера также повышает стабильность теста. Стабильность имеет значение: хотя предварительные тесты достаточно редки, чтобы допустить некоторую нестабильность, это аксиома, что ничто (повторяю: ничего) не может нарушить ночную сборку.
Перенос сквозного тестирования на ночные запуски означает, что то, что когда-то было частью процесса контроля качества перед выпуском, теперь интегрировано в процесс доставки программного обеспечения. Результатом является уменьшение разделения между двумя командами и начало формирования менталитета QAOps.
Стоимость
Однако существуют некоторые затраты на конверсию. Одним из преимуществ тестирования на основе пользовательского интерфейса является создание пользовательских сценариев: пользователи могут создавать значимые для них тесты, взаимодействуя с приложением для создания тестовых сценариев (включая проверку результатов), не обязательно полагаясь на среды тестирования.Тем не менее, некоторая поддержка разработчиков все же требуется, поскольку это необычная среда, в которой сценарии конечного пользователя выполняют все необходимые тесты.
Еще одна хорошая новость: при тестировании безголового браузера можно использовать сценарии, созданные вашими конечными пользователями. Однако любые созданные разработчиками тесты, которые являются частью вашего сквозного тестирования, должны быть переписаны для работы в «безголовой» среде. Разработчикам, пишущим тесты для безголовой среды, потребуется развить некоторые новые навыки.
Также было бы ошибкой думать, что безголовое тестирование позволит отказаться от тестирования пользовательского интерфейса. Как признал еще в 2013 году стратег модернизации Джим Холмс: «Запуск сеанса браузера действительно замедляет тесты… но [тесты без головы] не заменяют функциональные тесты на основе браузера. Весь смысл функционального тестирования пользовательского интерфейса заключается в том, чтобы убедиться, что ваше приложение работает в различных браузерах со всеми их уникальными особенностями и «особенностями». .”
С тех пор многое произошло, включая принятие Chromium в качестве основы для многих браузеров, но точка зрения Джима остается в силе. Фактически, такие продукты, как Telerik Test Studio, по-прежнему делают это сообщение приоритетным — как тестирование пользовательского интерфейса, так и безголовое тестирование браузера имеют значение и должны идти рука об руку — и Test Studio будет поддерживать оба теста с солидными возможностями как для технических, так и для менее технических пользователей, начиная с выпуска R1 2021.
Поскольку как тестирование на основе пользовательского интерфейса, так и безголовое браузерное тестирование являются сквозными, почти наверняка будут некоторые совпадения в тестах между двумя наборами тестов. Само по себе это не обязательно плохо — самые большие затраты связаны с избыточным тестированием, когда оба набора тестов выполняются вместе. Если эта неэффективность вас беспокоит, ее можно устранить, пропустив безголовое тестирование в процессе подготовки к выпуску (в конце концов, вчера вечером код прошел ваши безголовые тесты). Это усложняет управление тестированием, если в настоящее время вы используете один и тот же процесс как для ночного, так и для предварительного тестирования.
Безголовое браузерное тестирование обеспечивает эффективность, позволяющую применить мышление сдвига влево и приступить к реализации QAOps. Перемещая сквозное тестирование на более ранние этапы процесса разработки, вы делаете тесты более полезными, что, безусловно, хорошо.
Но, используя фразу, которая витала в воздухе с 1930-х годов, "бесплатных обедов не бывает": вам потребуется выделить ресурсы разработчика для создания необходимых тестов без скриптов и фиксации тестов. управленческие ресурсы для разработки правильных процессов для вашей организации. К счастью, интеграция QA с разработкой программного обеспечения через QAOps может помочь предоставить необходимые ресурсы.
Питер Фогель
Питер Фогель — системный архитектор и руководитель PH&V Information Services. PH&V предоставляет комплексные консультации от дизайна UX до объектного моделирования и проектирования баз данных. Питер также пишет курсы и преподает для Learning Tree International.
Безголовое тестирование — это когда вы запускаете тест браузера на основе пользовательского интерфейса, не показывая пользовательский интерфейс браузера. Он запускает тест или запускает скрипт в браузере, но без браузера, пользовательский интерфейс запускается.
Почему вы хотите использовать автономные браузеры? Есть много плюсов и минусов в следовании этому подходу. Использование безголового браузера может быть не очень полезным для просмотра веб-страниц, но для автоматизации задач и тестов это великолепно.
Почему вы должны заботиться о тестировании с помощью автономного браузера?
Следовать за деньгами — такое клише, но это ключевой показатель того, что я считаю реальной тенденцией, и на что мне следует обратить внимание.
Например, компания Sauce Labs только что выпустила новый сервис под названием Sauce Headless — облачное решение для безголового тестирования.
Я знаю, что сотрудники Sauce умные люди. Они ничего не разрабатывают, пока не получат отзывы от своих пользователей о том, что это необходимая функциональность.
Я уверен, что они не будут одиноки в своем стремлении к безголовому тестированию.
Безголовое тестирование в браузере — это дизайнерское мышление со сдвигом влево, которое важно для контроля качества программного обеспечения.
Это означает, что тесты автоматизированы и выполняются в браузере без участия пользователя.
Поскольку мы все больше и больше смещаемся влево в жизненном цикле разработки программного обеспечения, нам нужно все быстрее и быстрее давать обратную связь нашим разработчикам.
Один из способов сделать это — использовать несколько быстрых проверок с использованием автономного браузера.
Автоматизация производства программного обеспечения
Если вы меня вообще знаете, вы также знаете, что я активно использую автоматизацию.
Для меня это не просто автоматическое тестирование.
Это все, что вы можете автоматизировать, чтобы сэкономить чье-то время или усилия на любом этапе жизненного цикла поставки программного обеспечения, будь то разработка, контроль качества, тестирование, DevOps или установка; Я бы назвал любой из них автоматизацией. И безголовые браузеры — это то, что вы действительно можете использовать для многих из этих усилий.
Тестирование автономного браузера — это процесс тестирования приложения или веб-сайта без присутствия пользователя.
У этого метода есть свои плюсы и минусы, которые будут зависеть от вашего конкретного проекта.
ЗА: Headless-браузеры быстрее, чем настоящие браузеры
Одно несомненное преимущество безголовых браузеров заключается в том, что они, как правило, быстрее, чем настоящие браузеры; причина в том, что, поскольку вы не запускаете графический интерфейс браузера, вы можете обойти все время, необходимое настоящему браузеру для загрузки CSS, JavaScript и открытия и отображения HTML.
Хотя я должен признать, что это не совсем похоже на день и ночь. Но при использовании безголового браузера производительность обычно увеличивается в 2–15 раз.
Поэтому, если для вас критична производительность, вам могут подойти автономные браузеры.
Скрапинг безголового браузера
Еще одно преимущество безголовых браузеров заключается в том, что их можно использовать для очистки веб-сайтов. Однако для этого вам не обязательно вручную запускать веб-сайт. Вы можете перейти к нему без головы и просто очистить HTML. Для этого вам не нужно отображать весь браузер.
Например, предположим, что вашей работе нужны данные спортивной статистики или сравнение цен на разных сайтах.
Поскольку вам нужны только данные, нет смысла запускать полный экземпляр браузера; это просто дополнительные накладные расходы, и иногда чем меньше у вас накладных расходов, тем быстрее вы получите результаты.
Это может быть не обязательно тест, и это нормально. Опять же, вы хотите использовать правильные инструменты, чтобы делать правильные вещи.
Я также думаю, что безголовый просмотр браузера не используется многими тестировщиками, и это позор.
Поэтому, если вы хотите выполнить парсинг веб-сайта, чтобы помочь вам с тестом, позже вам не обязательно потребуются накладные расходы на запуск полнофункционального браузера; вы можете использовать безголовые браузеры, чтобы получить эту функциональность для вас.
Экономьте время разработчиков
Мне известно, что многие разработчики используют автономный браузер для модульного тестирования изменений кода своих веб-сайтов и мобильных приложений. Возможность делать все это из командной строки без необходимости вручную обновлять или запускать браузер экономит много сил и сил. Например, Роб Фризел, автор PhantomJS CookBook, в интервью TestTalks объяснил, как его разработчики используют безголовый браузер PhantomJS:
«Хотя PhantomJs сам по себе не является тестовой средой, это действительно хорошая канарейка в угольной шахте, которая вселяет в вас уверенность; если ваши тесты проходят успешно, вы можете быть уверены, что ваш код в порядке.”
Отслеживание производительности с помощью скриптов браузера без заголовка
Еще одно распространенное применение — использование скрипта автономного браузера для мониторинга производительности сетевых приложений.
Некоторые даже используют его для автоматизации рендеринга и захвата экрана изображений своих веб-сайтов для автоматической проверки макета.
Я думаю, что это одна из причин, по которой Google также разработала новый безголовый API Chrome под названием Puppeteer, который был разработан для многих из этих сценариев использования разработчиками.
Идеи для тестирования автономного браузера
Помимо того, что мы уже рассмотрели, вот несколько других способов использования безголовых браузеров, с которыми я столкнулся:
- Выполнение тестов на компьютере без дисплея
- Настройка данных
- Тестирование SSL
- Имитация нескольких браузеров на одном компьютере
- Выполнение тестов на безголовой системе, такой как ОС Linux, без графического интерфейса.
- Получение и обработка PDF-файлов
- Тестирование макета. Поскольку безголовые браузеры отображают и интерпретируют CSS и HTML как настоящий браузер, вы можете использовать его для тестирования элементов стиля.
Примеры ситуаций, когда вы НЕ хотите использовать безголовый браузер
Конечно, существует ряд причин, по которым вы можете захотеть использовать настоящий браузер, а не автономный браузер. Например:
- Вам нужно имитировать реальных пользователей
- Вам нужно визуально увидеть тестовый запуск.
- Если вам нужно выполнять много отладки, автономная отладка может быть затруднена.
Популярные безголовые браузеры
- Google Puppeteer: браузер без головы Puppeteer представляет собой библиотеку Node. Он дает вам высокоуровневый API для управления безголовым Chrome или Chromium по протоколу DevTools. Его также можно настроить для использования полного (не безголового) Chrome или Chromium.
- Google Chrome начиная с версии 59
- Firefox версий 55 и 56
- PhantomJS — это безголовый WebKit-скрипт с API-интерфейсом JavaScript. Он имеет быструю и встроенную поддержку различных веб-стандартов: обработка DOM, селектор CSS, JSON, Canvas и SVG. * Это больше не поддерживается.Из-за этого вы можете избежать.
- HtmlUnit – это «браузер без графического интерфейса для программ Java». Он моделирует HTML-документы и предоставляет API, который позволяет вам вызывать страницы, заполнять формы, переходить по ссылкам и т. д. так же, как вы делаете это в своем «обычном» браузере. — Splinter — это безголовый браузер, ориентированный на Python. Он имеет открытый исходный код и используется для тестирования веб-приложений с использованием Python. Например, вы можете использовать его для автоматизации действий браузера, таких как посещение URL-адресов и взаимодействие с их элементами. – Программируемый, встраиваемый драйвер веб-браузера, совместимый со спецификацией Selenium WebDriver – безголовый, основанный на WebKit, чистая Java
Когда использовать безголовый браузер для тестирования?
Итак, когда вам следует использовать автономный просмотр для тестирования? Как видите, это зависит от ваших целей тестирования.
Люди слева часто говорят: «Никогда не используйте безголовый браузер. Настоящий пользователь никогда бы не стал его использовать, так зачем вам?» Между тем люди справа скажут: «Вы всегда должны использовать автономные браузеры, потому что они всегда быстрее, а чем быстрее, тем лучше».
Однако, как мы хорошо знаем, это не всегда одно против другого, а скорее вопрос выбора правильного инструмента для задачи прав в зависимости от ситуации.
Помните: используйте правильный инструмент для работы и всегда спрашивайте себя, как это повлияет на конечных пользователей и каковы цели вашего теста, когда вы выбираете один из двух подходов.
Читайте также: