Ответ
Нагрузочное тестирование (Load Testing) — классический пример нефункционального тестирования.
Цель: Оценить поведение и производительность системы под ожидаемой пиковой нагрузкой. Проверяется, как система справляется с одновременной работой множества пользователей.
Пример задачи: Определить, выдержит ли API сервиса поиска товаров нагрузку в 1000 запросов в секунду в течение 10 минут.
Ключевые метрики:
- Время отклика (Response Time) — должно оставаться в пределах SLA (например, < 200 мс).
- Количество обработанных транзакций в секунду (TPS/RPS).
- Утилизация ресурсов — загрузка CPU, памяти, сети сервера.
- Процент ошибок — должен быть близок к нулю.
Пример конфигурации сценария в Apache JMeter:
Thread Group:
Number of Threads (users): 1000
Ramp-up period (seconds): 120 # Наращивание нагрузки за 2 минуты
Loop Count: Forever
Duration (seconds): 600 # Общая длительность теста 10 минут
HTTP Request Defaults:
Server Name: api.example.com
Protocol: https
HTTP Request:
Method: GET
Path: /api/v1/products/search?query=laptop
Listener: Summary Report / Graph Results # Для сбора результатов
Другие примеры нефункциональных видов тестирования:
- Тестирование производительности (Performance Testing) — общая оценка скорости и стабильности.
- Стресс-тестирование (Stress Testing) — проверка за пределами нормальной нагрузки до точки отказа.
- Тестирование масштабируемости (Scalability Testing) — проверка возможности увеличения производительности при добавлении ресурсов.
- Объемное тестирование (Volume Testing) — работа с большими объемами данных.
- Тестирование надежности (Reliability/Soak Testing) — длительная работа под средней нагрузкой для поиска утечек памяти.
Ответ 18+ 🔞
Вот смотри, есть такая штука — нагрузочное тестирование. Это когда ты пытаешься понять, не развалится ли твоё творение, если на него навалится куча народу. Представь, ты открыл шаурмичную на вокзале — и тут разом три электрички прибыли. Выдержит ли твой кассовый аппарат, не сломается ли гриль, и не отправит ли повар в первого клиента шаурмой в лицо от безысходности? Вот примерно это и есть.
Цель — не проверить, вкусная ли шаурма, а выяснить, не сдохнет ли вся система, когда к ней одновременно припрет овердохуища народа. То есть, накидываем ожидаемую пиковую нагрузку и смотрим, не поплывёт ли всё к ебене матери.
Пример задачи: А выдержит ли наш задротский API по поиску товаров, если его начнут дрочить по тысяче запросов в секунду, и так десять минут подряд? Не начнёт ли он в ответ плеваться пятисотыми ошибками и материться на древнеанглийском?
На что смотрим, пока система под нагрузкой стонет:
- Время отклика — сколько ждать, пока сервер выдаст ответ. Если по SLA должно быть меньше 200 миллисекунд, а он уже две секунды тупит — это пиздец, а не производительность.
- Сколько транзакций в секунду прожевывает — собственно, ту самую тысячу запросов он должен стабильно обрабатывать, а не падать на пятой сотне.
- Загрузка ресурсов — процессор не должен пылать, как сердце влюблённого подростка, память не должна течь, как сито, а сетевая карта — не захлёбываться.
- Процент ошибок — должен быть около нуля. Если каждая десятая операция — ошибка, то это не нагрузочное тестирование, а стресс-тестирование для тимлида, у него волосы выпадут.
Вот как это примерно выглядит в Apache JMeter, инструменте, который устроит твоей системе такую же встряску, как литр энергетика студенту перед сессией:
Thread Group:
Number of Threads (users): 1000 # Тысяча виртуальных юзеров, которые будут ебашить
Ramp-up period (seconds): 120 # Наращиваем толпу не сразу, а за две минуты, чтоб не спугнуть
Loop Count: Forever
Duration (seconds): 600 # И ебашим ровно десять минут, без передышки
HTTP Request Defaults:
Server Name: api.example.com
Protocol: https
HTTP Request:
Method: GET
Path: /api/v1/products/search?query=laptop # Все дружно ищем ноуты, будто чёрная пятница
Listener: Summary Report / Graph Results # Сюда будут сыпаться цифры, по которым мы поймём, герой наш API или говно
А ещё, блядь, есть куча других способов помучить систему, кроме как просто нагрузить её по самое не балуй:
- Тестирование производительности — общая проверка, шустрая ли она вообще, или как пенсионер с тележкой в метро в час пик.
- Стресс-тестирование — это когда накидываем нагрузки больше, чем она может выдержать, и смотрим, как она красиво и с какими словами отказывает. Чтобы понять, где у неё слабое место.
- Тестирование масштабируемости — а что если добавить серверов? Станет ли лучше, или просто все они дружно сдохнут?
- Объемное тестирование — закидываем в базу данных столько информации, что она начинает поскрипывать, и смотрим, не развалится ли.
- Тестирование надежности (Soak Testing) — это длительный марафон под средней нагрузкой. Система должна работать часами, днями, не начиная течь памятью и не забывая, как её зовут. Если через сутки она потребляет оперативку, как пылесос, — дело дрянь.
Вот так вот, коротко и с матерком, о серьёзном.