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 (CPU Utilization)
- Използване на памет (Memory Usage)
- Активност на твърдия диск (Disk I/O)
- Мрежова активност (Network I/O)
- Метрики на базата данни (броя заявки, времето за изпълнение на заявки)
Тестовете за натоварване помагат да се предотврати сривът на системата в продукция при високо натоварване и да се осигури приемливо ниво на качество за крайните потребители.