Junior
Povedzte mi o záťažových testoch.
sobes.tech AI
Odpoveď od AI
Záťažové testovanie je druh testovania zameraný na určenie výkonu, stability a škálovateľnosti aplikácie (systému) pri rôznych zaťaženiach.
Úlohy záťažového testovania:
- Určenie maximálnej záťaže, ktorú systém vydrží.
- Identifikácia "úzkych miest" (bottleneckov).
- Vyhodnotenie času odozvy systému pri zadanom zaťažení.
- Kontrola stability systému v dlhodobom horizonte pri zaťažení.
- Testovanie škálovateľnosti systému.
Druhy záťažového testovania:
- Záťažové testovanie (Load Testing): Kontrola správania systému pri očakávanom (bežnom) úrovni zaťaženia.
- Stress testing (Stress Testing): Kontrola systému pri zaťažení, ktoré presahuje bežné, do vzniku zlyhaní. Cieľ - určiť hranicu odolnosti.
- Testovanie odolnosti / vytrvalosti (Endurance/Soak Testing): Kontrola stability systému pri dlhodobom pôsobení stredného alebo vysokého zaťaženia, odhalenie únikov pamäti, degradácie výkonu časom.
- Testovanie špičkového zaťaženia (Spike Testing): Kontrola správania systému pri náhlom, okamžitom zvýšení zaťaženia.
- Testovanie škálovateľnosti (Scalability Testing): Hodnotenie schopnosti systému spracovávať rastúci objem zaťaženia pomocou horizontálneho alebo vertikálneho škálovania zdrojov.
- Testovanie objemu (Volume Testing): Kontrola správania systému pri raste objemu dát v databáze alebo iných úložiskách.
Fázy vykonávania záťažového testovania:
- Stanovenie cieľov: Jasné určenie metrík výkonu (doba odozvy, priepustnosť, počet chýb) a kritérií úspechu.
- Plánovanie a návrh scenárov: Analýza používateľských scenárov, určenie profilu zaťaženia (počet virtuálnych používateľov, intenzita požiadaviek).
- Vývoj testovacích skriptov: Písanie skriptov na simuláciu akcií používateľov s využitím nástrojov na záťažové testovanie.
- Príprava testovacieho prostredia: Nastavenie testovacieho prostredia, ktoré simuluje pracovné prostredie.
- Vykonanie testov: Spustenie testov s rôznym zaťažením.
- Monitorovanie a zber dát: Zber metrík výkonu systému, serverov, databáz.
- Analýza výsledkov a reportovanie: Porovnanie získaných výsledkov s cieľovými metrikami, odhalenie problémov, príprava správy.
Nástroje na záťažové testovanie:
- JMeter
- LoadRunner
- Gatling
- k6
- Locust
Príklad jednoduchého skriptu 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="Príklad záťaže">
<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)
- Метрики на базата данни (броя заявки, време за изпълнение на заявки)
Тестовете за натоварване помагат да се предотврати сривът на системата в продукция при високо натоварване и да се осигури приемливо ниво на качество за крайните потребители.