← Назад к вопросам

Что такое загрузочное тестирование?

1.0 Junior🔥 221 комментариев
#Тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Загрузочное тестирование

Загрузочное тестирование (Load Testing) — это вид тестирования производительности, при котором к системе применяется нагрузка, близкая к предполагаемой нормальной нагрузке в продакшене, чтобы оценить поведение приложения при реальных условиях использования. Это критически важный процесс для обеспечения надежности и масштабируемости современных веб-приложений.

Основные цели загрузочного тестирования

Основные задачи, которые решаются при проведении загрузочного тестирования:

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

Инструменты для загрузочного тестирования

В экосистеме Python существуют несколько популярных инструментов:

Locust — наиболее популярное решение:

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    wait_time = between(1, 5)
    
    @task
    def index(self):
        self.client.get("/")
    
    @task(3)
    def view_items(self):
        self.client.get("/api/items")
    
    @task(2)
    def create_item(self):
        self.client.post("/api/items", json={
            "name": "Test Item",
            "description": "Test"
        })

Вы запускаете тест командой: locust -f locustfile.py --host=http://localhost:8000

Apache JMeter — более сложный инструмент с GUI, поддерживающий различные протоколы.

wrk и hey — легковесные утилиты для быстрого бенчмарка.

Типы нагрузочного тестирования

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

  • Базовое загрузочное тестирование — постоянная нагрузка на протяжении определенного времени
  • Стресс-тестирование — постепенное увеличение нагрузки до отказа системы
  • Тестирование выносливости (soak testing) — нормальная или чуть выше средней нагрузка в течение длительного периода
  • Пиковое тестирование — внезапное увеличение нагрузки до пиковых значений
  • Spike testing — резкие и короткие всплески нагрузки

Практический пример с использованием Locust

from locust import HttpUser, task, between, events
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()

class ApiUser(HttpUser):
    wait_time = between(2, 5)
    
    def on_start(self):
        """Вызывается при запуске пользователя"""
        logger.info("User started")
        # Можно выполнить login
        response = self.client.post("/api/auth/login", json={
            "username": "test",
            "password": "test123"
        })
        self.token = response.json().get("token")
    
    @task(10)
    def list_items(self):
        headers = {"Authorization": f"Bearer {self.token}"}
        self.client.get("/api/items", headers=headers)
    
    @task(5)
    def get_item_details(self):
        item_id = 42
        headers = {"Authorization": f"Bearer {self.token}"}
        self.client.get(f"/api/items/{item_id}", headers=headers)
    
    @task(3)
    def create_item(self):
        headers = {"Authorization": f"Bearer {self.token}"}
        self.client.post("/api/items", json={
            "name": "Load Test Item",
            "price": 99.99
        }, headers=headers)

@events.test_start.add_listener
def on_test_start(environment, **kwargs):
    logger.info("=== Загрузочное тестирование началось ===")

@events.test_stop.add_listener
def on_test_stop(environment, **kwargs):
    logger.info("=== Загрузочное тестирование завершено ===")

Ключевые метрики

При проведении загрузочного тестирования измеряются следующие метрики:

  • Response Time (время отклика) — среднее, минимальное и максимальное время ответа сервера
  • Throughput (пропускная способность) — количество успешных запросов в секунду
  • Error Rate (процент ошибок) — доля неудачных запросов
  • CPU и Memory Usage — использование процессора и памяти сервера
  • Database connections — количество открытых подключений к БД
  • P95/P99 latency — 95-й и 99-й процентили времени отклика

Интеграция с CI/CD

# Пример использования Locust результатов в CI/CD
from locust.contrib.statistics import StatsEntry

if environment.stats.total.fail_per_sec > 0.05:
    # Более 5% ошибок — тест не прошел
    exit(1)

if environment.stats.total.get_response_time_percentile(0.95) > 500:
    # P95 больше 500ms — тест не прошел
    exit(1)

Загрузочное тестирование — это необходимая практика в разработке надежных приложений. Оно помогает выявить проблемы на ранних этапах и обеспечить хорошее пользовательское восприятие в условиях высокой нагрузки.