Junior
Povězte mi o zátěžových testech.
sobes.tech AI
Odpověď od AI
Zátěžové testování je druh testování zaměřený na stanovení výkonu, stability a škálovatelnosti aplikace (systému) při různých zátěžích.
Úkoly zátěžového testování:
- Určení maximální zátěže, kterou systém vydrží.
- Identifikace "úzkých míst" (bottlenecků).
- Vyhodnocení doby odezvy systému při dané zátěži.
- Kontrola stability systému v dlouhodobém horizontu při zátěži.
- Testování škálovatelnosti systému.
Druhy zátěžového testování:
- Zátěžové testování (Load Testing): Kontrola chování systému při očekávané (běžné) úrovni zátěže.
- Stress testing (Stress Testing): Kontrola systému při zátěži přesahující běžnou, do vzniku selhání. Cíl - určit mezní odolnost.
- Testování odolnosti / vytrvalosti (Endurance/Soak Testing): Kontrola stability systému při dlouhodobém působení střední nebo vysoké zátěže, odhalení úniků paměti, degradace výkonu v čase.
- Testování špičkové zátěže (Spike Testing): Kontrola chování systému při náhlém, okamžitém zvýšení zátěže.
- Testování škálovatelnosti (Scalability Testing): Hodnocení schopnosti systému zpracovávat rostoucí objem zátěže pomocí horizontálního nebo vertikálního škálování zdrojů.
- Testování objemu (Volume Testing): Kontrola chování systému při růstu objemu dat v databázi nebo jiných úložištích.
Fáze provádění zátěžového testování:
- Stanovení cílů: Jasné určení metrik výkonu (doba odezvy, propustnost, počet chyb) a kritérií úspěšnosti.
- Plánování a návrh scénářů: Analýza uživatelských scénářů, určení profilu zátěže (počet virtuálních uživatelů, intenzita požadavků).
- Vývoj testovacích skriptů: Psání skriptů pro simulaci akcí uživatelů s využitím nástrojů zátěžového testování.
- Příprava testovacího prostředí: Nastavení testovacího prostředí, které simuluje pracovní prostředí.
- Provedení testovacích běhů: Spuštění testů s různou zátěží.
- Monitorování a sběr dat: Sběr metrik výkonu systému, serverů, databází.
- Analýza výsledků a reportování: Porovnání získaných výsledků s cílovými metrikami, odhalení problémů, příprava zprávy.
Nástroje pro zátěžové testování:
- JMeter
- LoadRunner
- Gatling
- k6
- Locust
Pří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="Zátěžový test pro příklad">
<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="Příklad HTTP požadavku">
<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>
Metriky shromažďované při zátěžovém testování:
- Doba odezvy (Response Time)
- Propustnost (Throughput)
- Počet chyb za sekundu (Errors per Second)
- Počet požadavků za sekundu (Requests per Second / Transactions per Second)
- Využití CPU (CPU Utilization)
- Využití paměti (Memory Usage)
- Aktivita pevného disku (Disk I/O)
- Síťová aktivita (Network I/O)
- Metriky databáze (počet požadavků, doba vykonání požadavků)
Zátěžové testování pomáhá předejít selhání systému v produkci při vysoké zátěži a zajistit přijatelnou úroveň kvality pro koncové uživatele.