Как тестировать сайт под нагрузкой на примере Apache JMeter

23 апреля 2021

СОДЕРЖАНИЕ

Предварительный сбор данных из Яндекс.Метрики

Предполагаем количество запросов на 1 визит

Установка и настройка ПО для тестирования

Механика проведения нагрузочного теста и анализ полученных результатов

Какую нагрузку лучше всего давать во время стресс-теста

Итоги

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

!!!СПОЙЛЕР!!!

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

  • во время нагрузочного тестирования всегда есть риск «положить» сайт;
  • с клиентом вопрос тестирования сайта под нагрузкой не согласовывался;
  • результаты тестов «в полную силу» нам никто из клиентов не разрешал публиковать.

Тестировать на нагрузку мы будем сайт Vape.Academy – это интернет-магазин электронных сигарет, курительных смесей (легальных), кальянов, табаков, компонентов самозамеса и т.д. Тестирование мы проводили днём, т.к. провести тесты ночью, пока все спят, возможности не было.

Предварительный сбор данных из Яндекс.Метрики

Самое первое, что нужно сделать – изучить данные по трафику за последний год, чтобы выяснить:

  • в какой день была максимальная посещаемость;
  • узнать максимальное количество посетителей.

Для этого формируем отчет о посещаемости за последний год. Для большего удобства мы сформировали отчет за период с 30 сентября 2019 года по 1 октября 2020 года. Нам нужно знать именно количество визитов, а не количество посетителей, ибо за 1 и тот же день один и тот же посетитель может возвращаться на сайт несколько раз. Т.е. визита может быть 3, а посетитель – 1. При этом серверам глубоко до женского детородного органа на то, один и тот же посетитель заходит на сайт или 3 разных. Есть визит – есть нагрузка. Нет визита – нет нагрузки.

По графику мы видим, что максимальное количество визитов наблюдалось 15 января 2020 года и составляло 4438 посещений. Многие из Вас уже догадались, что можно высчитать средний трафик за час/полчаса/10_минут/минуту и получить соответственно 185/93/31/3 посещения соответственно. Если это так, то Вы догадались… НЕПРАВИЛЬНО.

Гораздо правильнее сформировать отчет посещаемости на эти сутки и посмотреть, как распределялся трафик.

Как видно по графику, в период с 18:30 по 18:40 было 106 визитов, или 10 визитов в минуту. Именно от этой цифры мы и будем отталкиваться.

Итак, из отчета по посещаемости мы выяснили, что за последний год:

  • суточный трафик может составлять 4440 визитов (для удобства округлим до 4400);
  • за 10 минут вполне может «набежать» 106 посетителей (для удобства округлим до 100, ну или 10 посетителей в минуту.

Начальные данные из Яндекс.Метрики получены.

Предполагаем количество запросов на 1 визит

Для чего это нужно? Очень просто. Если пользователь пришел на сайт, то далеко не факт, что он сразу же оттуда уйдет. Пользователь может указать город, порассматривать 10-20 карточек товаров, отправить товар в корзину (а это тоже запрос на сервер), оформить заказ (а это еще несколько запросов на сервер) и т.д. Разумеется, точное количество запросов предугадать нельзя. Поэтому попробуем спрогнозировать.

Для прогноза воспользуемся онлайн-сервисом https://gtmetrix.com/. Просто вводим туда адрес нашего интернет-магазина и запускаем тестирование.

В данном случае сервис спрогнозировал 65 обращений за 1 посещение.

Именно на эти данные мы и будем опираться.

Установка и настройка ПО для тестирования

Тестировать сайт мы будем с помощью Apache JMeter 5.3, вот ссылка на скачивание всего необходимого (https://mega.nz/file/Kx5wDCwC#tmntroIQgD3NIBNUZNrLb7izxxtnKs8hc8T9Jn8BZJo ). В архиве, собственно, сам Apache JMeter 5.3, а также Java 8 для 64- и 86-разрядных операционных систем. Java 8 должна быть установлена на ПК в обязательном порядке, ибо без этого пакета Apache JMeter работать не будет.

После установки Java 8 идём в apache-jmeter-5.3 -> bin и запускаем jmeter.bat.

Как видите, JMeter не русифицирован, а потому мы с Вами будем рассматривать всё, вплоть до «куда тыкнуть и что писать».

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

Далее нам необходимо создать виртуальную группу пользователей. Для этого в левом столбце правый клик по названию проекта -> Add -> Threads (users) –> Thread Group.

Группу пользователей мы создали, теперь ее нужно настроить. Для этого:

  • в поле Number of Threads указываем количество пользователей (в данном случае мы укажем 100 посетителей, т.к. именно столько было зафиксировано в пике в самый посещаемый день);
  • в поле Ramp-up period указываем длительность теста (в данном случае мы укажем 600 секунд, т.е. 10 минут);
  • в поле Loop Count указываем количество спрогнозированных запросов, которые будут поступать от пользователей (в нашем случае – 65).

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

Группу виртуальных пользователей мы настроили, вот только она не знает, на какой сайт ей заходить. Ничего страшного, сейчас покажем. Для этого по Thread Group правым кликом -> Add -> Sampler -> HTTP Request.

Далее в Protocol прописываем https или https (смотря по какому из них работает сайт), а в Server Name прописываем имя домена, на котором размещен Ваш сайт.

Теперь переходим к настройке мониторинга. Для этого по HTTP Request правым кликом -> Add -> Listener -> Summary Report и также добавляем Graph Results. Т.е. мы добавили суммарный отчет, а также возможность построения графиков мониторинга проведения нагрузочного теста.

Всё, что осталось – сохранить проект перед запуском. Ну… на дискетку уже сами нажмёте и имя проекту сами дадите.

Механика проведения нагрузочного теста и анализ полученных результатов

И только теперь можно запускать стресс-тест сайта, что мы и сделали.

Единственное что – мы сократили количество посетителей со 100 до 10, уменьшив тем самым нагрузку в 10 раз. Причина была указана в самом начале – никто не разрешал нам проводить стресс-тесты на этом сайте, а это значит, что сильно грузить сайт конкретно в нашем случае нельзя. Тем не менее, даже такого лёгкого теста будет вполне достаточно, чтобы показать, куда нужно смотреть и что нужно увидеть.

Итак, тест завершился, переходим к результатам. Для начала давайте изучим суммарный отчет, он же Summary Report.

Во-первых, нас интересуют поля Average, Min и Max. Здесь мы видим время отклика – от 250 миллисекунд до 2,75 секунд, а средний отклик составляет 527 миллисекунд.  Результаты неутешительные, но не забываем, что тест проводился днём, а это значит, что помимо наших виртуальных посетителей на сайте были и другие люди.

Но самое главное – процент ошибок равен нулю, а это значит, что сайт в процессе тестирования не «лёг». Теперь давайте глянем график.

А график, увы, неутешительный. Во-первых, синий и фиолетовый графики у нас внизу, а это значит, что большой нагрузки на сайт действительно не было. В то же время зеленый график очень сильно ушел вверх + является очень «рваным», т.е. время на обработку запроса от виртуального пользователя у нас может очень сильно прыгать. По графику максимальное время ответа составило 2311 миллисекунды, т.е. 2,3 секунды, а это очень много.

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

Какую нагрузку лучше всего давать во время стресс-теста

Если коротко и на пальцах, то проводить нагрузочное тестирование сайта лучше всего проводить в несколько этапов – от самого лёгкого к самому тяжелому. Т.е. начинать можно с 5 посетителей за 10 минут при 2-3 действиях на 1 пользователя и заканчивать нагрузкой, которая будет кратно превышать суточный трафик.

Однако, тут тоже есть свои нюансы и тонкости.

Во-первых, необходим хороший высокоскоростной интернет, т.е. 3G/4G для этих целей не подойдёт, поскольку очень многое зависит от оператора, да и пинг нередко бывает по 150-200 миллисекунд, а это овер-дофига. 

Во-вторых, после того как «потолок» будет найден, необходимо разобраться, устраивает нас такая пропускная способность, или нет. Если да (что бывает крайне редко) – значит через некоторое время этот ответ сменится на «нет». Если не устраивает – необходимо устроить разбор полётов, чтобы выявить все слабые места и укрепить их.

В-третьих, перед тем, как повышать нагрузку, необходимо провести повторное тестирование с теми же настройками, с которыми проводилось предыдущее. Если результат стал значительно лучше – повышаем. Если нет (что редко, но бывает) – повторно устраиваем разбор полётов, чтобы выяснить, где и как ошиблись программисты, их ли это вина, и т.д. И ВООБЩЕ, МОЖЕТ ВСЕ-ТАКИ СТОИТ СМЕНИТЬ ХОСТИНГ?!

И последнее – максимальная нагрузка, которую рекомендуется давать в стресс-тесте.

1) ищем самый трафиковый день;

2) полученный в тот день трафик делим на 3;

3) даём нагрузку на 1 час.

Да, нагрузка на сайт будет просто бешеная и он за это время если и не «ляжет», то как минимум перестанет быть супербыстрым. Ну а если мы ошиблись и Ваш сайт при такой нагрузке остался таким же отзывчивым, каким и был, то можете выписать премию программистам – они это заслужили.

Такое тестирование следует проводить перед какими-либо крупными скидочно-акционными мероприятиями. Например, та же «черная пятница».

Что-что? У Вас абсолютно новый сайт, который пока еще не дает никакого трафика и Вам не на что ориентироваться? Ну тут 2 варианта – либо просто выяснить, при какой нагрузке сайт начнет работать медленнее, либо ориентируйтесь на трафик конкурентов. Тем более, никто и никогда точно не скажет, какой трафик даст то или иное событие.

Итоги

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

По факту мы с Вами разобрались, как правильно проводить нагрузочное тестирование, с помощью чего, а главное – какую нагрузку нужно давать на сервера. Плюс к этому мы выяснили, как нужно анализировать результаты – куда смотреть и что там нужно увидеть.

Однако, мы рассмотрели только один инструмент для проведения нагрузочного тестирования, причем «из дома». А ведь есть еще огромное количество другого ПО и других сервисов, которые тоже предназначены для тестирования сайта под нагрузкой. Их тоже будем периодически рассматривать.

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



Подпишитесь на обновления
Лучшей оценкой нашего труда является ваша подписка на новые публикации. Мы очень постараемся быть интересными и обещаем не спамить.
 

(0)
Читайте также