Тестирование нагрузки:
HTTP против безготового против реального браузера
Медленная загрузка или неотвека на веб-страницы оказывают влияние на финансовые доходы, поскольку разочарованные пользователи, скорее всего, не вернутся после того, как проблема будет решена. Таким образом, тестирование производительности стало фундаментальной частью цепочки разработки, и спрос на них продолжает расти.
Платформы тестирования производительности предоставляют широкий спектр методов моделирования нагрузки, таких как HTTP, безготье и реальный браузер на основе. В настоящем документе мы наметим основные аспекты, за которыми следует матрица сравнения, которую можно использовать для выбора соответствующего подхода к моделированию.
В первые дни цифровой эры тестирование на основе HTTP было очень популярным. С ростом богатой технологии веб-клиентов подходы к моделированию на основе HTTP становятся все более устаревшими. Типичный тест-пилот на базе HTTP выполняет запросы на обслуживание и анализирует ответы. Современные web 2.0 приложения состоят из многих клиентских скриптов, которые полностью игнорируются, а не измеряются в этом типе тестового исполнения. В наихудших случаях сложные случаи использования не могут быть смоделированы на уровне протокола из-за нехватки идентификаторов, генерируемых клиентской стороной.
Из-за их запроса и характера, основанного на ответах, накладные расходы на машину для впрыска нагрузки очень низки. Типичный тестовый сервер нагрузки может имитировать до 800 одновременных сеансов. Сложные случаи использования на основе протокола могут быть трудно реализовать. Инженеру по производительности необходимо иметь дело с файлами cookie, данными сеансов и другими динамическими параметрами. В зависимости от типа тестируются системы, некоторые имена веб-форм часто меняются после развертывания новой версии, что приведет к стеху на основе HTTP скрипта.
пример сценария уровня протокола
транзакция TMain
Var
hContext: число;
Начать
WebPageUrl (“http://lab3/st/”, “Приветствие”);
WebPageStoreContext (hContext);
WebPageLink (“Присоединиться к опыту!”, ” – Новый посетитель”);
WebPageSubmit (“Продолжить”, CONTINUE001, “Главное меню”);
WebPageLink (“Продукты”, “ShopIt – Продукты”);
WebPageLink (NULL, “ShopIt – Продукт”, 3);
WebPageSubmit (“Поиск”, SEARCH001, ” – Поиск”, 0, NULL, hContext);
конец TMain;
dclform
CONTINUE001:
“имя” : “Джек”,
“Новое имя-кнопка” : “Продолжить”;
SEARCH001:
“поиск”: “загрузка”;
В конце концов, скрипты уровня протокола хороши для тестов уровня компонентов в средах непрерывной интеграции и идеальной обстановкой для стресс-тестирования из-за их низкого следа на машинах для впрыска нагрузки.
С ростом технологий Web 2.0, испытательный бизнес столкнулся с серьезными проблемами. Богатые браузерные приложения больше не могут быть протестированы или смоделированы на уровне протокола из-за отсутствия логики стороны клиента во время воспроизведения сценария. Таким образом, было введено несколько безголюхих браузеров, таких как HtmlUnit, PhantomJS или SlimerJS. Они часто построены на вершине WebKit, двигатель за Chrome и Safari.
Безготовные браузеры похожи на реальные браузеры без графического интерфейса. Многие платформы автоматизации тестирования и тестирования производительности используют безготовые браузеры для имитации трафика.
Безготовные браузеры имеют свои собственные подводные камни; как новые браузеры выходят на рынки безголовой комплекты браузера необходимо догнать все производительность и функции усовершенствования реальных браузеров.
Моделирование визуализации стороны клиента не бесплатно. Типичный сервер впрыска нагрузки может имитировать до 10-12 одновременных сеансов безготового браузера, по сравнению с 500 сеансами на основе HTTP.
Реализация и настройка тестовых скриптов не слишком сложны. Если у вас есть базовые навыки кодирования, вы сможете создавать простые скрипты. Не все безголюкие браузеры предоставляют функции визуального воспроизведения и без визуального воспроизведения скрипта отладки или анализа ошибок может стать очень сложно.
образец скрипта phantomjs
“использовать строгий”;
var страница требует (‘webpage’).создать (),
сервер – ‘http://posttestserver.com/post.php?dump’,
данные : «вселенная» расширяется и отвечает»42′;
page.open (сервер, ‘пост’, данные, функция (статус)
если (статус! – ‘успех’)
консоль.log (‘Не удается разместить!’);
– в остальном.
консоль.log (page.content);
}
phantom.exit();
});
В примере сценария, увиденного здесь, выполняется простой запрос поста. Для настройки таких тестовых скриптов необходимы навыки программирования Java.
Web2.0 приложения полны JavaScript, Flash, Ajax и CSS. Без полного браузера невозможно измерить фактическое время отклика всей веб-страницы. Реальное тестирование производительности на основе браузера позволяет проверить функциональность и скорость сайта, как это воспринимается конечный пользователь.
Типичное реальное решение для тестирования производительности браузера собирает время загрузки изображений, JavaScript, CSS и многое другое. Часто они обеспечивают водопад диаграммы, которые визуализируют время загрузки этих компонентов.
След реального браузера на основе браузера немного выше. Учитывая тот факт, что безголикое моделирование браузера не дает 100% реалистичных раз отклика, справедливо сказать, что реальное моделирование на основе браузера должно быть предпочтительным. В реальных сценариях жизни, безготье браузеры выполняют только 20% лучше, чем реальные браузеры. Таким образом, если средний одногрузовой инжектор может работать 10-12 безголочных сеансов браузера, тот же инжектор нагрузки может запустить 8-10 реальных сеансов браузера.
Реализация и техническое обслуживание тестовых скриптов легко, потому что действия пользователя непосредственно отражены и визуальный повтор делает отладку легкой. В примере скрипта ниже браузер открывает URL, вставляет пользователя и пароль и нажимает кнопку входа.
образец реального сценария на основе браузера
транзакция TMain
Начать
BrowserStart (BROWSER_MODE_DEFAULT, 800, 600);
перейти на сайт входа
BrowserNavigate (“http://demo.com/TestSite/LoginForm.html”);
установить аутентификацию для безопасного сайта
BrowserSetText (“//INPUT @name’пользователя”, “Пользователь1”);
BrowserSetPassword (“//INPUT@name’pwd'”, “Password1”);
Входа
BrowserClick (“//INPUT @value”Login'”, BUTTON_Left);
конец TMain;
В конце концов, реальное моделирование браузера полезно для реалистичных тестов на нагрузку, но оно может стать дорогим для стресс-тестирования больших объемов пользователей, потому что след на сервере впрыска нагрузки слишком высок.
Типы тестов производительности
Тесты скорости компонентов
В последние годы методы разработки программного обеспечения продвинулись в гибком направлении. Короткие спринты релиза имеют важное значение. Разработчики и инженеры-испытатели автоматизируют проверку качества и производительности. Как правило, они реализуют тесты производительности на основе службы на уровне протокола или моделируют реальные проверки производительности на основе браузера, чтобы сравнить время отклика в конце с согласованными границами производительности.
Цели
Повторяемость
Автоматизированный интерфейс и все-в-конце проверки производительности
Сравните время отклика с согласованными пороговыми значениями
Нагрузочных тестов
По ряду причин нагрузочные тесты являются идеальным методом тестирования, когда дело доходит до проверки нефункциональных требований. Один из них в том, что время отклика может быть проверено в воспроизводимых условиях. Другое дело, что эти тесты позволяют проверить пороговые значения времени отклика. Реалистичное измерение времени отклика имеет важное значение в сценариях тестирования нагрузки. Поэтому инженеры-испытатели используют безготовное или реальное моделирование пользователей на основе браузера для своих настроек тестирования нагрузки.
Цели
– Моделирование воспроизводимой нагрузки
Проверка пороговых значений времени отклика
Определить узкие места в производстве, такие как условия загрузки
Реалистичные сценарии тестирования
Стресс-тест
Если вам нужно проверить надежность приложения в условиях пиковой нагрузки, провейте стресс-тест. В этом типе теста вы указываете главным образом максимальное количество пользователей и время, в течение которого наращивание и устойчивая нагрузка состояния должны быть на вашем приложении. Цель состоит в том, чтобы определить переломные моменты вашего приложения в тесте.
Цели
Доказательство масштабируемости и стабильности
Имитировать условия пиковой нагрузки
Точная воспроизводимость не важна
Сравнение
Очевидно, что есть веские причины для протокола, безготье или реального браузера на основе моделирования пользователей. Приведенная ниже матрица содержит некоторые рекомендации по выбору соответствующего подхода.
Критерии
HTTP
Безготовный браузер
Реальный браузер
Моделирование пользователя
Никакая
клиентская визуализация
Некоторые элементы со стороны клиента моделируются
Моделирование реальных пользователей
Реализация
сценария и настройка
Трудно, когда веб-сайты сложны
Навыки разработчика, необходимые для создания надежных скриптов
Простые скрипты, легко настраиваемые
S
криптоповтор
Требуется анализ низкого уровня
В зависимости от используемого двигателя возможен визуальный повтор
Вы видите, что вы получаете
Обслуживание скрипта
Необходимы навыки программирования
Ошибки в непроявных разделах сложно решить
Легко, потому что вы видите сбои во время повтора
Поддержка нескольких браузеров
Некоторые инструменты эмулируют веб-браузеры, но это несопоставимо
Да, но некоторые элементы часто отсутствуют
Некоторые поддерживают другие версии и различные браузеры
F
ootprint на машине впрыска нагрузки
Низкий
, до 800 сеансов на сервер
Средний
, до
10-12 сеансов
на сервер
Высокая
, до 6 сеансов на сервер
Рекомендуется
для
DevOps
Зависит от фактического сценария тестирования
Нет, часто сложные скрипты
Да, просты в использовании и реалистичные цифры
Рекомендуется для нагрузочных тестов
Нет,
обработка на стороне клиента пропущена
Да, лучше, чем моделирование HTTP
Да, реалистичное моделирование пользователей
Рекомендуется для стресс-тестов
Да, потому что есть низкие накладные расходы на машину генератора нагрузки
Нет, накладные расходы на машину генератора нагрузки слишком высоки
Нет, самые
высокие накладные расходы на машину генератора нагрузки
Расходы
Низкой
Высокой
Высокой
Рекомендуется для больших объемов, недорогих тестов веб-сервер стресс-тестов (где это возможно)
Не рекомендуется
Рекомендуется для моделирования реальных сложных приложений.
Стресс-тест
Если вам нужно проверить надежность приложения в условиях пиковой нагрузки, провейте стресс-тест. В этом типе теста вы указываете главным образом максимальное количество пользователей и время, в течение которого наращивание и устойчивая нагрузка состояния должны быть на вашем приложении. Цель состоит в том, чтобы определить переломные моменты вашего приложения в тесте.
Цели
Доказательство масштабируемости и стабильности
Имитировать условия пиковой нагрузки
Точная воспроизводимость не важна
Сравнение
Очевидно, что есть веские причины для протокола, безготье или реального браузера на основе моделирования пользователей. Приведенная ниже матрица содержит некоторые рекомендации по выбору соответствующего подхода.
Критерии | HTTP | Безготовный браузер | Реальный браузер |
Моделирование пользователя | Никакая клиентская визуализация | Некоторые элементы клиентской стороны моделируются | Моделирование реальных пользователей |
Реализация сценария и настройка | Трудно, когда веб-сайты сложны | Навыки разработчика, необходимые для создания надежных скриптов | Простые скрипты, легко настраиваемые |
Повтор сценария | Требуется анализ низкого уровня | В зависимости от используемого двигателя возможно визуальное воспроизведение | Вы видите, что вы получаете |
Обслуживание скрипта | Необходимы навыки программирования | Ошибки в не отрисованные разделы сложно решить | Легко, потому что вы видите сбои во время повтора |
Поддержка нескольких браузеров | Некоторые инструменты эмулировать веб-браузер, но это не сопоставимо | Да, но некоторые элементы часто отсутствуют | Некоторые поддерживают другие версии и различные браузеры |
След на машине впрыска нагрузки | Низкий, до 800 сеансов на сервер | Средний, до 10-12 сеансов на сервер | Высокий, до 6 сеансов на сервер |
Рекомендуется для DevOps | Зависит от фактического сценария тестирования | Нет, часто сложные скрипты | Да, просты в использовании и реалистичные цифры |
Рекомендуется для нагрузочных тестов | Нет, обработка клиентской стороны пропущена | Да, лучше, чем моделирование HTTP | Да, реалистичное моделирование пользователей |
Рекомендуется для стресс-тестов | Да, потому что есть низкие накладные расходы на машину генератора нагрузки | Нет, накладные расходы на машину генератора нагрузки слишком высоки | Нет, самые высокие накладные расходы на машину генератора нагрузки |
Расходы | Низкой | Высокой | Высокой |
Рекомендуется для больших объемов, недорогих тестов веб-сервер стресс-тестов (где это возможно) | Не рекомендуется | Рекомендуется для моделирования реальных сложных приложений.
|
- https://developers.google.com/web/tools/chrome-devtools/device-mode/testing-other-browsers
- https://watirmelon.blog/2015/12/08/real-vs-headless-browsers-for-automated-acceptance-tests/
- http://news.softpedia.com/news/what-is-a-headless-browser-and-what-s-it-good-for-485162.shtml
- https://github.com/dhamaniasad/HeadlessBrowsers
- https://circleci.com/