Junior
дар бораи санҷиши боргирӣ гӯед.
sobes.tech AI
Ҷавоб аз 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 Request">
<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)
- Метрики бази даних (кількість запитів, час виконання запитів)
Залежно від високого навантаження, навантажувальні тести допомагають запобігти збоїв системи у виробництві та забезпечити прийнятний рівень якості для кінцевих користувачів.