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

Что такое тестирование производительности?

1.3 Junior🔥 261 комментариев
#Инструменты тестирования#Теория тестирования

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

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

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

Что такое тестирование производительности?

Тестирование производительности (Performance Testing) — это тип нефункционального тестирования программного обеспечения, направленный на оценку характеристик системы под различными нагрузками. Его цель — не поиск дефектов в логике приложения, а определение метрик производительности (время отклика, пропускная способность, использование ресурсов) и выявление «узких мест» (bottlenecks), которые могут повлиять на стабильность, масштабируемость и пользовательский опыт при реальной эксплуатации.

В отличие от функционального тестирования, которое отвечает на вопрос «Что система делает?», тестирование производительности отвечает на вопросы: «Как быстро?», «Насколько стабильно?» и «При каких нагрузках?».

Ключевые цели тестирования производительности

  • Оценка времени отклика системы при выполнении ключевых операций (например, загрузка страницы, выполнение транзакции).
  • Определение пропускной способности — максимального количества пользователей или операций, которое система может обработать за единицу времени.
  • Анализ стабильности и надежности системы при длительной (устойчивой) нагрузке.
  • Проверка масштабируемости — способности системы увеличивать производительность при добавлении ресурсов (аппаратных или программных).
  • Выявление узких мест и лимитов производительности на уровне базы данных, сервера приложений, сети или кода.
  • Подтверждение соответствия системы требованиям к производительности (например, «95% запросов должны обрабатываться менее чем за 2 секунды»).

Основные типы (подвиды) тестирования производительности

Тип тестированияОсновная цельКлючевой вопрос
Load Testing (Нагрузочное)Проверить поведение системы под ожидаемой пиковой нагрузкой.Выдерживает ли система планируемое количество пользователей?
Stress Testing (Стрессовое)Найти точку отказа системы, постепенно увеличивая нагрузку за пределы нормы.Где предел системы и как она ведет себя после сбоя?
Volume Testing (Объемное)Проверить работу с большими объемами данных (например, в БД).Как система работает с 1 млн записей в таблице?
Endurance / Soak Testing (Тестирование на выносливость)Выявить проблемы при длительной работе под средней нагрузкой (утечки памяти, фрагментация).Работает ли система стабильно 24/7?
Spike Testing (Тестирование на всплески)Проверить реакцию на резкие, кратковременные скачки нагрузки.Что будет, если 10 000 пользователей зайдут на сайт одновременно?
Scalability Testing (Тестирование масштабируемости)Определить, как добавление ресурсов улучшает производительность.Поможет ли добавление серверов увеличить пропускную способность?

Типичный процесс тестирования производительности

  1. Определение целей и требований. Наиболее критичный этап. Что будем измерять? Каковы критерии успеха (SLA)?
    *   Пример: «Страница каталога должна загружаться ≤ 1.5 сек для 90% пользователей при 1000 одновременных сессий».

  1. Планирование и проектирование тестовой среды. Среда должна максимально приближённо воспроизводить продакшен (Production-like environment). Создаются скрипты для эмуляции поведения пользователей.

  2. Настройка мониторинга. Устанавливаются инструменты для сбора метрик с:

    *   Серверов (**CPU, RAM, Disk I/O, Network**).
    *   Приложения (логи, **JVM heap** для Java, пулы соединений).
    *   Базы данных (**время выполнения запросов, блокировки**).
    *   Клиентской стороны (**время отрисовки страницы**).

  1. Выполнение тестов. Запуск различных сценариев (нагрузочных, стрессовых и т.д.) с помощью специализированных инструментов.

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

Инструменты и ключевые метрики

Популярные инструменты:

  • JMeter (де-факто стандарт, open-source).
  • k6 (современный скриптовый инструмент на JavaScript, набирает популярность).
  • Gatling (высокая производительность, хорошая отчетность, используется Scala для скриптов).
  • LoadRunner (мощный коммерческий инструмент от Micro Focus).
  • Встроенные в экосистему: Locust (Python), Tsung (Erlang), Yandex.Tank.

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

  • Response Time / Throughput / Error Rate — «золотая тройка».
  • Percentiles (перцентили): P95, P99 — показывают опыт большинства пользователей, а не среднее значение.
  • Requests per Second (RPS) / Transactions per Second (TPS).
  • Concurrent Users / Virtual Users (VU).
  • Utilization (загрузка CPU, потребление памяти).

Пример простого скрипта на JMeter

// Это не фактический код, а иллюстрация структуры плана теста в JMeter.
// Фактически JMeter использует GUI или XML (JMX) для конфигурации.

// 1. Thread Group (Группа потоков)
//    Number of Threads (users): 100
//    Ramp-up period: 60 секунд
//    Loop Count: Forever

// 2. HTTP Request Defaults
//    Server Name: api.example.com
//    Port: 443

// 3. HTTP Request Sampler
//    Path: /products
//    Method: GET

// 4. Response Assertion
//    Проверка, что код ответа равен 200

// 5. Summary Report / View Results Tree (Слушатели для сбора результатов)

Роль QA-инженера в тестировании производительности

Специалист по тестированию производительности (Performance QA Engineer) — это, по сути, инженер-исследователь. Его задача не просто «нажать кнопку» в JMeter, а:

  • Глубоко понимать архитектуру тестируемой системы.
  • Уметь проектировать репрезентативные сценарии нагрузки.
  • Владеть инструментами для нагрузочного тестирования и мониторинга.
  • Проводить корреляционный анализ между нагрузкой, временем отклика и метриками инфраструктуры.
  • Предлагать направления для оптимизации (настройка веб-сервера, индексы БД, кэширование, оптимизация запросов).
  • Четко доносить результаты и риски до разработчиков, DevOps и бизнеса.

Таким образом, тестирование производительности — это комплексная инженерная дисциплина, направленная на обеспечение не только работоспособности, но и отзывчивости, стабильности и способности системы к росту, что напрямую влияет на удовлетворенность пользователей и репутацию продукта.