1. Введение в нагрузочное тестирование: цели, виды и основные понятия
Введение в нагрузочное тестирование: цели, виды и основные понятия
Представьте, что вы владелец небольшого уютного магазина. Обычно к вам заходят 10–20 покупателей в час, и один кассир прекрасно справляется с работой. Но наступает «Чёрная пятница». В магазин одновременно пытаются войти 500 человек. Кассир в панике, очередь выходит на улицу, терминал оплаты зависает, а недовольные клиенты уходят к конкурентам.
В мире IT происходит то же самое. Только вместо магазина — ваш веб-сайт или приложение, а вместо покупателей — виртуальные пользователи.
Эта статья открывает курс «Основы нагрузочного тестирования». Сегодня мы разберем фундамент: что это такое, зачем это нужно бизнесу и инженерам, и какие виды нагрузок существуют.
!Визуальное сравнение штатной работы системы и работы в условиях критической нагрузки
Что такое нагрузочное тестирование?
Нагрузочное тестирование (Performance Testing) — это вид нефункционального тестирования, который определяет, как система ведет себя под определенной нагрузкой.
В отличие от функционального тестирования, где мы проверяем «работает ли кнопка», здесь мы спрашиваем: «как быстро сработает кнопка, если на неё нажмут 10 000 человек одновременно?».
Основные цели
Главная цель — не просто «сломать» сервер, а получить измеримые показатели качества. Мы хотим убедиться в следующем:
Ключевые метрики и понятия
Прежде чем углубляться в виды тестирования, нам нужно выучить «язык», на котором говорят нагрузочные тестировщики. Всё тестирование строится вокруг нескольких ключевых метрик.
1. Время отклика (Response Time)
Это время, которое проходит с момента отправки запроса пользователем до получения ответа. Это, пожалуй, самый понятный для бизнеса показатель.> «Пользователь не должен ждать загрузки страницы больше 2 секунд» — типичное требование к времени отклика.
2. Пропускная способность (Throughput)
Это количество данных или запросов, которые система может обработать за единицу времени. Часто измеряется в RPS (Requests Per Second — запросов в секунду).3. Количество виртуальных пользователей (Virtual Users / VU)
Это эмулируемые потоки, которые выполняют сценарии использования системы. Важно понимать, что 1000 зарегистрированных пользователей — это не то же самое, что 1000 одновременно работающих (concurrent) пользователей.Математическая связь метрик: Закон Литтла
В теории массового обслуживания существует фундаментальная теорема, которая связывает эти понятия — Закон Литтла. Он помогает проверить корректность ваших тестов.
Формула выглядит так:
Где: * — среднее количество пользователей в системе (Concurrency). * — скорость поступления запросов или пропускная способность (RPS). * — среднее время нахождения запроса в системе (Response Time).
Пример: Если ваша система обрабатывает 100 запросов в секунду (), и каждый запрос обрабатывается 0.5 секунды (), то в любой момент времени в системе находится 50 активных пользователей ().
Если вы видите в отчете, что при 100 пользователях и времени отклика 0.5 секунды ваш RPS равен 1000, значит, в отчете ошибка или вы неправильно понимаете модель нагрузки. Закон Литтла не обмануть.
Виды нагрузочного тестирования
Многие новички называют всё подряд «стресс-тестированием», но это неверно. Существует несколько видов тестов, каждый из которых отвечает на свой вопрос.
!Графическое отображение профилей нагрузки для разных видов тестирования
1. Нагрузочное тестирование (Load Testing)
Это «классическое» тестирование. Мы подаем на систему ожидаемую нагрузку (например, ту, которая планируется в продакшене).* Цель: Проверить, справляется ли система с заявленными требованиями. * Вопрос: «Выдержит ли сайт 1000 пользователей, как мы обещали заказчику?»
2. Стресс-тестирование (Stress Testing)
Здесь мы намеренно превышаем ожидаемую нагрузку, пока система не сломается.* Цель: Найти предел прочности (точку отказа) и проверить восстанавливаемость. * Вопрос: «При какой нагрузке сервер упадет? И поднимется ли он сам, когда нагрузка спадет?»
3. Тестирование стабильности (Stability / Soak Testing)
Длительный тест (от нескольких часов до нескольких суток) со средней нагрузкой.* Цель: Найти утечки памяти, переполнение логов или баз данных. * Вопрос: «Не начнет ли система тормозить, если будет работать под нагрузкой 24 часа подряд?»
4. Тестирование всплесков (Spike Testing)
Резкое увеличение и уменьшение нагрузки.* Цель: Проверить реакцию на внезапные скачки трафика (например, рассылка пуш-уведомлений или реклама по ТВ). * Вопрос: «Что будет, если за 1 минуту придет 10 000 человек, а потом все уйдут?»
5. Тестирование масштабируемости (Scalability Testing)
Мы постепенно увеличиваем нагрузку и одновременно добавляем ресурсы (например, новые сервера).* Цель: Понять, дает ли добавление «железа» прирост производительности. * Вопрос: «Если мы поставим второй сервер, сможем ли мы обработать в 2 раза больше людей?»
Жизненный цикл нагрузочного тестирования
Нагрузочное тестирование — это не просто «запустить скрипт и смотреть на графики». Это процесс, состоящий из этапов:
Заключение
Нагрузочное тестирование — это страховка вашего бизнеса. Оно позволяет узнать о проблемах до того, как о них узнают пользователи. В этой статье мы разобрали основные понятия и виды тестов. В следующих уроках мы перейдем к практике: научимся составлять профиль нагрузки и писать первые скрипты.
Запомните главное правило: нельзя оптимизировать то, что нельзя измерить. Нагрузочное тестирование дает нам именно измерения.