Определение
Performance Testing (тестирование производительности) — это тип нефункционального тестирования, который оценивает:
- Скорость работы системы
- Стабильность под нагрузкой
- Масштабируемость
- Использование ресурсов
Основные виды performance-тестирования
1. Load Testing
- Проверка поведения системы под ожидаемой нагрузкой
- Пример:
@LoadTest(users = 1000, duration = "1h")
public void userLoginLoadTest() {
loginPage.authenticate(testUser, testPass);
}
2. Stress Testing
- Определение предельных возможностей системы
- Выявление точки отказа
3. Soak Testing
- Длительная проверка под средней нагрузкой
- Выявление утечек памяти
4. Spike Testing
- Резкие изменения нагрузки
- Проверка восстановления системы
Ключевые метрики
Метрика | Описание | Оптимальные значения |
Response Time | Время отклика системы | <1s для критичных операций |
Throughput | Количество операций в секунду | Зависит от бизнес-требований |
Error Rate | Процент ошибок | <1% |
CPU Usage | Использование процессора | <70% под нагрузкой |
Memory Usage | Использование памяти | Без постоянного роста |
Процесс performance-тестирования
-
Планирование:
- Определение целей тестирования
- Создание тестовых сценариев
-
Подготовка:
- Настройка тестового окружения
- Подготовка тестовых данных
# Генерация тестовых данных
def generate_test_users(count):
return [f"test_user_{i}@domain.com" for i in range(count)]
-
Выполнение:
- Запуск тестов
- Мониторинг системы
-
Анализ:
- Выявление узких мест
- Подготовка отчета
Инструменты
- JMeter:
- Для веб-приложений и API
- Пример конфигурации:
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="API Load Test">
<intProp name="ThreadGroup.num_threads">100</intProp>
</ThreadGroup>
-
Gatling:
- Для высоконагруженных систем
- Поддержка Scala DSL
-
Locust:
- Python-фреймворк
- Простота написания сценариев
Лучшие практики
- Тестируйте на production-like окружении
- Начинайте с малых нагрузок
- Изолируйте тестовое окружение
- Автоматизируйте сценарии
- Проводите тесты регулярно
Распространенные ошибки
- Тестирование на неподходящем железе
- Игнорирование warm-up периода
- Недостаточная длительность тестов
- Отсутствие мониторинга ресурсов
Резюмируем
Performance Testing позволяет:
- Гарантировать стабильность системы под нагрузкой
- Выявлять узкие места в архитектуре
- Предотвращать сбои в production
- Оптимизировать использование ресурсов
Ключевые принципы:
- Тестируйте реалистичные сценарии
- Измеряйте правильные метрики
- Документируйте результаты
- Интегрируйте в CI/CD pipeline