Junior
Ispričajte mi o testiranju opterećenja.
sobes.tech АИ
Одговор од АИ
Testiranje opterećenja je vrsta testiranja usmerena na određivanje performansi, stabilnosti i skalabilnosti aplikacije (sistema) pri različitim opterećenjima.
Zadaci testiranja opterećenja:
- Određivanje maksimalnog opterećenja koje sistem može izdržati.
- Identifikacija "uskih grla" (bottlenecks).
- Procena vremena odziva sistema pri datom opterećenju.
- Provera stabilnosti sistema na duži rok pod opterećenjem.
- Testiranje skalabilnosti sistema.
Vrste testiranja opterećenja:
- Testiranje opterećenja (Load Testing): Provera ponašanja sistema pri očekivanom (redovnom) nivou opterećenja.
- Stress test (Stress Testing): Provera sistema pri opterećenju koje premašuje redovno, do pojave kvarova. Cilj - odrediti granicu izdržljivosti.
- Testiranje izdržljivosti / trajnosti (Endurance/Soak Testing): Provera stabilnosti sistema pri dugotrajnom delovanju srednjeg ili visokog opterećenja, otkrivanje curenja memorije, degradacije performansi tokom vremena.
- Testiranje vršnog opterećenja (Spike Testing): Provera ponašanja sistema pri naglom, trenutnom povećanju opterećenja.
- Testiranje skalabilnosti (Scalability Testing): Procena sposobnosti sistema da obrađuje rastući obim opterećenja putem horizontalnog ili vertikalnog skaliranja resursa.
- Testiranje volumena (Volume Testing): Provera ponašanja sistema pri rastu obima podataka u bazi ili drugim skladištima.
Faze sprovođenja testiranja opterećenja:
- Definisanje ciljeva: Jasno definisanje metrika performansi (vreme odziva, propusnost, broj grešaka) i kriterijuma uspeha.
- Planiranje i dizajn scenarija: Analiza korisničkih scenarija, određivanje profila opterećenja (broj virtuelnih korisnika, intenzitet zahteva).
- Razvoj test skripti: Pisanje skripti za simulaciju akcija korisnika korišćenjem alata za testiranje opterećenja.
- Priprema testnog okruženja: Podešavanje testnog okruženja koje simulira radno okruženje.
- Izvođenje testova: Pokretanje testova sa različitim opterećenjem.
- Monitoring i prikupljanje podataka: Prikupljanje metrika performansi sistema, servera, baza podataka.
- Analiza rezultata i izveštavanje: Upoređivanje dobijenih rezultata sa ciljnim metrima, identifikacija problema, priprema izveštaja.
Alati za testiranje opterećenja:
- JMeter
- LoadRunner
- Gatling
- k6
- Locust
Primer jednostavnog skripta 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="Primer za opterećenje">
<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 zahtev">
<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)
- Метрике базе података (број захтева, време извршења захтева)
Тестирање оптерећења помаже у спречавању квара система у продукцији при високим оптерећењима и обезбеђује прихватљив ниво квалитета за крајње кориснике.