Junior
Papaskinkite apie apkrovos testavimą.
sobes.tech AI
Atsakymas iš AI
Krovinių testavimas — tai testavimo tipas, kuris skirtas nustatyti programėlės (sistemos) našumą, stabilumą ir mastelį įvairiose apkrovose.
Krovinių testavimo tikslai:
- nustatyti sistemos ribinę apkrovą;
- aptikti "siaurus" taškus (bottlenecks);
- įvertinti sistemos atsako laiką nustatytoje apkrovoje;
- patikrinti sistemos stabilumą ilgalaikėje perspektyvoje;
- patikrinti sistemos mastelį:
Krovinių testavimo tipai:
- Krovinių testavimas (Load Testing): patikrinti sistemos elgesį laukiamo (standartinio) apkrovos lygyje;
- Streso testavimas (Stress Testing): patikrinti sistemą apkrovoje, viršijančioje įprastą, iki kol įvyksta gedimai. Tikslas - nustatyti atsparumo ribą;
- Ištvermės/įsiurbimo testavimas (Endurance/Soak Testing): patikrinti sistemos stabilumą ilgalaikėje vidutinėje ar didelėje apkrovoje, aptikti atminties nutekėjimus, našumo mažėjimą laikui bėgant;
- Piko apkrovos testavimas (Spike Testing): patikrinti sistemos elgesį staiga ir vienu metu padidėjus apkrovai;
- Mastelio testavimas (Scalability Testing): įvertinti sistemos gebėjimą apdoroti augantį apkrovą horizontaliu ar vertikaliu išteklių mastelio keitimu;
- Duomenų kiekio testavimas (Volume Testing): patikrinti sistemos elgesį didėjant duomenų kiekiui duomenų bazėje ar kituose saugyklose.
Veiklos etapai:
- Tikslų nustatymas: aiškiai apibrėžti našumo metrikas (atsako laiką, pralaidumą, klaidų skaičių) ir sėkmės kriterijus;
- Scenarijų planavimas ir projektavimas: analizuoti naudotojų scenarijus, nustatyti apkrovos profilį (virtualių naudotojų skaičių, užklausų intensyvumą);
- Testų scenarijų kūrimas: rašyti scenarijus naudodami apkrovos testavimo įrankius, imituoti naudotojų veiksmus;
- Testavimo aplinkos paruošimas: sukurti testavimo stendą, imituojantį darbo aplinką;
- Testų vykdymas: paleisti testus su skirtinga apkrova;
- Stebėsena ir duomenų rinkimas: rinkti sistemos, serverių, duomenų bazės metrikas;
- Rezultatų analizė ir ataskaitų rengimas: palyginti gautus rezultatus su tikslais, nustatyti problemas, parengti ataskaitą.
Krovinių testavimo įrankiai:
- JMeter
- LoadRunner
- Gatling
- k6
- Locust
Pavyzdys — paprastas JMeter scenarijus (HTTP užklausa):
<?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="Krovinių testavimo pavyzdys">
<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 užklausa pavyzdys">
<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>
Krovinių testavimo metu surenkami metrikai:
- Atsako laikas (Response Time)
- Pralaidumas (Throughput)
- Klaidų skaičius per sekundę (Errors per Second)
- Užklausų skaičius per sekundę (Requests per Second / Transactions per Second)
- CPU naudojimas (CPU Utilization)
- Atminties naudojimas (Memory Usage)
- Disko aktyvumas (Disk I/O)
- Tinklo aktyvumas (Network I/O)
- Duomenų bazės metrikos (užklausų skaičius, užklausų vykdymo laikas)
Krovinių testavimas padeda išvengti sistemos gedimų gamyboje didelės apkrovos metu ir užtikrinti priimtinos kokybės lygį naudotojams.