Назад к вопросам
Junior
89
questionbank
Расскажите о нагрузочном тестировании.
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Нагрузочное тестирование — это вид тестирования, направленный на определение производительности, стабильности и масштабируемости приложения (системы) при различных нагрузках.
Задачи нагрузочного тестирования:
- Определение предельной нагрузки, которую выдерживает система.
- Выявление "узких" мест (bottlenecks).
- Оценка времени отклика системы при заданной нагрузке.
- Проверка стабильности работы системы в долгосрочной перспективе под нагрузкой.
- Проверка масштабируемости системы.
Виды нагрузочного тестирования:
- Нагрузочное тестирование (Load Testing): Проверка поведения системы при ожидаемом (штатном) уровне нагрузки.
- Стресс-тестирование (Stress Testing): Проверка системы при нагрузке, превышающей штатную, до возникновения сбоев. Цель - определить предел прочности.
- Тестирование на выносливость/доля (Endurance/Soak Testing): Проверка стабильности системы при длительном воздействии средней или высокой нагрузки, выявление утечек памяти, деградации производительности со временем.
- Тестирование пиковой нагрузки (Spike Testing): Проверка поведения системы при резком, одномоментном увеличении нагрузки.
- Тестирование масштабируемости (Scalability Testing): Оценка способности системы обрабатывать растущий объем нагрузки за счет горизонтального или вертикального масштабирования ресурсов.
- Тестирование объема (Volume Testing): Проверка поведения системы при росте объема данных в базе данных или других хранилищах.
Этапы проведения нагрузочного тестирования:
- Определение целей: Четкое определение метрик производительности (время отклика, пропускная способность, количество ошибок) и критериев успешности.
- Планирование и проектирование сценариев: Анализ пользовательских сценариев, определение профиля нагрузки (количество виртуальных пользователей, интенсивность запросов).
- Разработка тестовых скриптов: Написание скриптов для имитации действий пользователей с использованием инструментов нагрузочного тестирования.
- Подготовка тестовой среды: Настройка тестового стенда, имитирующего рабочую среду.
- Выполнение тестовых прогонов: Запуск тестов с различной нагрузкой.
- Мониторинг и сбор данных: Сбор метрик производительности системы, серверов, базы данных.
- Анализ результатов и отчетность: Сравнение полученных результатов с целевыми метриками, выявление проблем, подготовка отчета.
Инструменты для нагрузочного тестирования:
- JMeter
- LoadRunner
- Gatling
- k6
- Locust
Пример простого скрипта JMeter (HTTP Request):
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.2">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Нагрузочный тест для примера">
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
<intProp name="ThreadGroup.num_threads">100</intProp>
<intProp name="ThreadGroup.ramp_time">10</intProp>
<longProp name="ThreadGroup.duration">60</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Пример HTTP Запроса">
<stringProp name="HTTPSampler.domain">example.com</stringProp>
<stringProp name="HTTPSampler.path">/</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">false</boolProp>
<boolProp name="HTTPSampler.embedded_url_report">true</boolProp>
<boolProp name="HTTPSampler.connect_timeout"></boolProp>
<boolProp name="HTTPSampler.response_timeout"></boolProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.comment"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.image_parser">true</stringProp>
<stringProp name="HTTPSampler.concurrentDwn">Both</stringProp>
<stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
<stringProp name="HTTPSampler.implementation_status">OK</stringProp>
<boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
<listProp name="HTTPSampler.HTTP_HEADERS"></listProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</TestPlan>
</hashTree>
</jmeterTestPlan>
Метрики, собираемые при нагрузочном тестировании:
- Время отклика (Response Time)
- Пропускная способность (Throughput)
- Количество ошибок на единицу времени (Errors per Second)
- Количество запросов на единицу времени (Requests per Second / Transactions per Second)
- Загрузка процессора (CPU Utilization)
- Использование памяти (Memory Usage)
- Активность жесткого диска (Disk I/O)
- Сетевая активность (Network I/O)
- Метрики базы данных (количество запросов, время выполнения запросов)
Нагрузочное тестирование помогает предотвратить сбои системы в продакшене под высокой нагрузкой и обеспечить приемлемый уровень качества для конечных пользователей.