Как провести нагрузочное тестирование: пошаговый план

Обновлено

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

Если вы ещё не решили, нужен ли вам тест вообще, начните со статьи что такое нагрузочное тестирование и зачем оно. Здесь — о том, как его провести.

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

Шаг 1. Что именно вы хотите узнать?

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

  • «Выдержим ли распродажу?» Проверка конкретной ожидаемой нагрузки: например, вдвое больше посетителей, чем в прошлую «Чёрную пятницу».
  • «Где наш предел?» Нагрузку повышают до тех пор, пока сайт не начнёт отказывать. Это стресс-тест, о нём подробно — в статье как найти предел нагрузки сайта.
  • «Не стало ли хуже после обновления?» Тот же тест, что и месяц назад, и сравнение результатов.
  • «Выдержим ли рассылку или рекламу на ТВ?» Резкий всплеск за одну-две минуты вместо плавного роста.

Сразу запишите критерии успеха — числа, при которых вы скажете «сайт готов». Например: при 500 посетителях одновременно 95 % страниц открываются быстрее 2 секунд, а ошибок меньше 1 %. Без критериев любой результат можно истолковать как угодно.

Шаг 2. Какие показатели нужно измерять?

В отчётах о нагрузке встречается много терминов. На практике достаточно четырёх показателей:

  • Время отклика (по-английски latency или response time) — сколько проходит от запроса страницы до ответа сервера. Смотрите не на среднее, а на 95-й процентиль (p95): время, за которое открываются 95 % страниц. Среднее может быть хорошим, даже если каждый двадцатый посетитель ждёт 10 секунд.
  • Доля ошибок — сколько запросов закончились ответами с кодами 5xx (ошибки сервера, например 502 и 503), обрывом соединения или превышением времени ожидания (таймаутом).
  • Запросы в секунду (RPS) — сколько обращений сайт обрабатывает каждую секунду. Пока сайт справляется, это число растёт вместе с нагрузкой. Когда рост останавливается, сайт упёрся в предел. Подробнее о том, как связаны эти величины, — в статье почему сайт тормозит при наплыве посетителей.
  • Число одновременных посетителей — сколько виртуальных пользователей работает с сайтом в данный момент. Именно в этих единицах удобнее всего формулировать вывод: «сайт держит 800 человек одновременно».

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

Шаг 3. Сколько посетителей закладывать в тест?

Самая частая ошибка — взять число «с потолка». Нагрузку лучше считать от реальных данных.

Если у сайта есть история

Откройте Яндекс Метрику или другую систему аналитики и найдите самый загруженный час за последние месяцы — обычно это день прошлой акции или рассылки. Число визитов в час нужно перевести в число людей на сайте одновременно:

одновременно на сайте ≈ визитов в час × средняя длительность визита в минутах ÷ 60

Условный пример: 3 000 визитов в пиковый час при средней длительности визита 4 минуты дают около 3 000 × 4 ÷ 60 = 200 человек на сайте одновременно. Если на акцию вы ждёте вдвое больше трафика, тест должен проверить как минимум 400, а лучше — с запасом в полтора-два раза сверху.

Если истории нет

Отталкивайтесь от ожидаемого источника трафика. Для рассылки: размер базы × доля открытий письма × доля переходов, причём основная часть переходов придётся на первые 10–20 минут. Для рекламы: планируемые клики в час из рекламного кабинета. Запас в этом случае закладывайте больше — прогнозы трафика редко бывают точными.

Почему виртуальный посетитель не равен живому

Человек читает страницу десятки секунд, а программа в тесте делает паузу в одну-три секунды и открывает следующую. Поэтому 100 виртуальных посетителей нагружают сайт сильнее, чем 100 живых людей. Учитывайте это, когда сравниваете результаты теста с аналитикой: хороший отчёт сам пересчитывает нагрузку в «людей на сайте» и «визиты в час».

Шаг 4. Какие страницы включить в сценарий?

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

  • Главная и посадочные страницы — туда приходит реклама и рассылка.
  • Каталог и фильтры — каждый вариант фильтра часто собирается заново и нагружает базу данных.
  • Карточки товаров или услуг — берите много разных карточек, а не одну: одна и та же страница быстро попадает в кэш и показывает нереально хороший результат.
  • Поиск — одна из самых тяжёлых страниц почти на любом сайте.
  • Статические файлы — стили, скрипты, картинки. Они тоже занимают канал и процессы сервера.

Доли страниц должны быть похожи на реальные: если в аналитике 40 % просмотров приходится на карточки товаров, пусть и в тесте будет около 40 %. Действия, которые меняют данные — оформление заказа, оплату, регистрацию, отправку форм, — в нагрузочный тест на рабочем сайте лучше не включать: тест создаст сотни ненастоящих заказов и писем. Их проверяют отдельно, на тестовом стенде.

Шаг 5. Где и когда запускать тест?

Рабочий сайт или копия

Копия сайта (её называют тестовым стендом) безопаснее: на ней можно нагружать что угодно, не рискуя настоящими посетителями. Но её результаты верны, только если сервер, настройки и объём данных совпадают с рабочими. Копия на слабом сервере покажет предел, который ничего не говорит о настоящем сайте. Поэтому сайты малого и среднего бизнеса чаще проверяют сам рабочий сайт — в спокойное время и с автоматической остановкой.

Время запуска

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

Кого предупредить

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

Откуда подавать нагрузку

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

Шаг 6. Как задать профиль нагрузки?

Профиль — это то, как нагрузка меняется во времени. Почти любой тест состоит из трёх частей:

  1. Разгон. Число посетителей растёт постепенно, за несколько минут. Так видно, при какой нагрузке начинаются проблемы, а у кэша есть время «прогреться».
  2. Удержание. Нагрузка держится на целевом уровне несколько минут. Некоторые проблемы — переполнение очереди, нехватка памяти — появляются не сразу.
  3. Спад. Нагрузка плавно снижается. Полезно посмотреть, как быстро сайт приходит в норму.

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

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

Шаг 7. Как читать результаты теста?

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

  • Найдите точку деградации — число посетителей, после которого время отклика (p95) начинает резко расти. Это практическая вместимость сайта. Её и сравнивайте с ожидаемой нагрузкой из шага 3.
  • Проверьте, растут ли запросы в секунду. Если посетителей становится больше, а запросов в секунду — нет, сервер больше не успевает обрабатывать запросы и ставит их в очередь.
  • Посмотрите, какая страница сдалась первой. Обычно это поиск, фильтры каталога или страницы, которые не попадают в кэш. Это подсказка, что чинить.
  • Разберите ошибки по кодам. Ошибка 502 чаще значит, что не хватило рабочих процессов или они упали. Ошибка 503 — что сервер или хостинг сознательно отказывает из-за перегрузки. Таймауты — что ответ не пришёл вовсе.

Сравните результат с критериями из шага 1. Если сайт держит ожидаемую нагрузку с запасом в полтора-два раза — он готов. Если нет — переходите к исправлениям.

Шаг 8. Что делать после теста?

Чаще всего помогают три вещи: кэширование страниц, которые одинаковы для всех посетителей; отдача статических файлов через сеть доставки контента (CDN) или отдельный веб-сервер; тариф хостинга или сервер с большим числом рабочих процессов. Разбор причин по признакам — в статье сайт тормозит при наплыве посетителей.

Меняйте по одной вещи за раз и повторяйте тот же самый тест: та же нагрузка, тот же сценарий, похожее время суток. Только так видно, что именно дало эффект. Сохраните результаты — они станут точкой отсчёта для следующих проверок. Хорошая практика — повторять тест регулярно, например раз в месяц и после каждого крупного обновления: сайты постепенно «тяжелеют» от новых модулей, счётчиков и растущего каталога.

Какие ошибки чаще всего портят результаты?

  • Тест только главной страницы. Она закэширована, и результат выглядит лучше реальности.
  • Одна и та же карточка товара. По той же причине: сервер отдаёт её из кэша.
  • Нет пауз между действиями. Посетитель без пауз нагружает сайт как десятки людей, и предел окажется заниженным.
  • Среднее время вместо p95. Среднее скрывает тех, кто ждёт дольше всех.
  • Генератор нагрузки слабее сайта. Тест с ноутбука или маленького сервера измеряет сам генератор.
  • Сравнение несравнимого. Разные сценарии, разное время суток или разный профиль нагрузки «до» и «после» делают сравнение бессмысленным.
  • Тест без разрешения. Нагружать можно только свои системы или системы, владелец которых дал согласие.

Как провести тест в LoadSure?

Шаги выше можно сделать вручную в JMeter или k6 — это мощные бесплатные инструменты, если в команде есть инженер, готовый писать сценарии и разбирать графики. В LoadSure большую часть плана сервис делает сам:

  1. Добавьте сайт и подтвердите права на него — DNS-записью, файлом в корне сайта или мета-тегом на главной, как в Яндекс Вебмастере. Чужой сайт без подтверждения проверить нельзя, а подтверждение перепроверяется перед каждым запуском.
  2. Сценарий соберётся автоматически. Сервис найдёт главную, каталог, карточки и поиск и распределит просмотры по долям. Если подключить Яндекс Метрику, доли возьмутся из данных вашего сайта.
  3. Выберите ситуацию: небольшой наплыв, рекламная кампания, распродажа или «Найти предел». Профиль нагрузки — разгон, удержание и спад — задан заранее. Для специалистов есть ручная настройка.
  4. Следите за тестом в реальном времени. Тест остановится сам, если доля ошибок за последние 10 секунд превысит 15 %, если время отклика 95 % запросов дважды подряд окажется больше 10 секунд или если сайт перестанет отвечать на 20 секунд.
  5. Получите отчёт: сколько человек сайт держит уверенно, где начинаются проблемы, какие страницы сдаются первыми и что исправить. Два прогона можно сравнить рядом — «до» и «после».

Ограничения сервиса стоит знать заранее: тест открывает страницы так, как это делает посетитель, — без оформления заказов, оплаты и отправки форм. Лимиты нагрузки зависят от тарифа: [ВСТАВИТЬ: актуальные лимиты бесплатного тарифа — число посетителей, длительность теста, проверок в месяц].

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

Частые вопросы

Сколько времени занимает нагрузочное тестирование?

Сам прогон обычно длится от 5 до 30 минут: разгон, удержание и спад нагрузки. Подготовка зависит от способа: в онлайн-сервисе — несколько минут на подтверждение прав на сайт, со своим инструментом вроде JMeter — от нескольких часов до пары дней на сценарий и генератор нагрузки.

Можно ли тестировать сайт, который уже работает?

Да, если это ваш сайт или у вас есть согласие владельца. Запускайте тест в часы минимального трафика, увеличивайте нагрузку постепенно и включите автоматическую остановку: тогда настоящие посетители почти не заметят проверку.

Нужна ли копия сайта для тестирования?

Не обязательно. Копия (тестовый стенд) безопаснее, но её результаты верны, только если сервер, настройки и данные такие же, как у рабочего сайта. Для сайтов малого и среднего бизнеса чаще проверяют сам рабочий сайт ночью.

Сколько посетителей задавать в тесте?

Возьмите пиковый час из Яндекс Метрики или другой аналитики, пересчитайте его в число людей на сайте одновременно и добавьте запас под ожидаемый рост — рекламу, рассылку, распродажу. Формула и пример — в разделе о выборе нагрузки.

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

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

Ещё по теме