Что такое нагрузочное тестирование (Load Testing)

Ответ

Нагрузочное тестирование (Load Testing) — это вид тестирования производительности, целью которого является определение поведения системы под ожидаемой и пиковой нагрузкой. Оно помогает выявить узкие места (bottlenecks), измерить ключевые метрики и убедиться в стабильности приложения.

Ключевые задачи нагрузочного тестирования:

  • Определение максимальной пропускной способности (throughput).
  • Измерение времени отклика (response time) под нагрузкой.
  • Поиск утечек памяти и проблем с утилизацией CPU.
  • Проверка стабильности системы при длительной работе.

Пример с использованием Locust (инструмент для нагрузочного тестирования на Python):

Этот код определяет поведение виртуального пользователя, который с паузой от 1 до 5 секунд отправляет GET-запросы к эндпоинту /api/data.

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    # Пауза между запросами для каждого пользователя
    wait_time = between(1, 5)

    @task # Определяет задачу для выполнения
    def get_data(self):
        self.client.get("/api/data")

Популярные инструменты: JMeter, Gatling, k6, Locust.

Ответ 18+ 🔞

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

Зачем это вообще нужно, ёпта?

  • Узнать, сколько запросов в секунду твой сервис может проглотить, прежде чем начнёт блевать (это и есть пропускная способность).
  • Померить, не начинает ли он тупить и отвечать через пиздец сколько времени, когда на него наваливаются.
  • Найти, где у него течёт память или процессор зашкаливает до 100%, как у охуевшего.
  • Убедиться, что он не сдохнет через час работы, а будет стабильно, блядь, как швейцарские часы.

Вот, смотри, как это выглядит на практике, возьмём Locust (инструмент на Python, довольно простой):

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

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    # Пауза между запросами для каждого пользователя
    wait_time = between(1, 5)

    @task # Определяет задачу для выполнения
    def get_data(self):
        self.client.get("/api/data")

А вообще инструментов — овердохуища: JMeter (дедушка, мощный, но с интерфейсом из 90-х), Gatling (быстрый и с отчётами, от которых можно охуеть), k6 (современный, на Go), ну и наш сегодняшний герой — Locust. Выбирай, чем свою систему мучать, блядь. Главное — найти эти узкие места, пока их не нашёл разъярённый пользователь, готовый тебе в монитор кирпич запустить.