- Kaj je testiranje obremenitve?
- Arhitektura testiranja obremenitve
- Zakaj testiranje obremenitve?
- Okolje
- Pristop
- Najboljše prakse
- Zaključek
Popoln vodnik za testiranje obremenitve za začetnike:
V tem priročniku bomo izvedeli, zakaj izvajamo testiranje obremenitve, kaj dosežemo z njim, arhitekturo, kakšen pristop je treba uporabiti za uspešno izvedbo testa obremenitve, kako vzpostaviti okolje za testiranje obremenitve, najboljše prakse in najboljša orodja za testiranje obremenitve, ki so na voljo na trgu.
Slišali smo že za funkcionalno in nefunkcionalno testiranje. Pri nefunkcionalnem testiranju imamo različne vrste testiranja, kot so testiranje zmogljivosti, testiranje varnosti, testiranje uporabniškega vmesnika itd.
Zato je testiranje obremenitve nefunkcionalna vrsta testiranja, ki je podmnožica testiranja zmogljivosti.
Ko rečemo, da testiramo zmogljivost aplikacije, kaj vse testiramo? Testiramo aplikacijo za obremenitev, obseg, zmogljivost, stres itd.
Kaj je testiranje obremenitve?
Testiranje obremenitve je podskupina testiranja zmogljivosti, pri kateri testiramo odzivnost sistema v različnih pogojih obremenitve s simulacijo hkratnega dostopa več uporabnikov do aplikacije. Pri tem testiranju se običajno merita hitrost in zmogljivost aplikacije.
Tako ob vsaki spremembi obremenitve spremljamo obnašanje sistema pod različnimi pogoji.
Primer : Predpostavimo, da je zahteva naše stranke za prijavno stran 2-5 s in da bi morala biti ta 2-5 s dosledna ves čas, dokler obremenitev ne doseže 5000 uporabnikov. Kaj moramo torej opazovati? Ali je to samo sposobnost sistema za obdelavo obremenitve ali samo zahteva glede odzivnega časa?
Odgovor je oboje. Želimo sistem, ki lahko prenese obremenitev 5000 uporabnikov z odzivnim časom 2-5 sekund za vse sočasne uporabnike.
Kaj torej pomenita sočasni in virtualni uporabnik?
Hkratni uporabniki so tisti, ki se prijavijo v aplikacijo in hkrati opravijo niz dejavnosti ter se hkrati odjavijo iz aplikacije. Po drugi strani pa virtualni uporabniki samo vstopajo v sistem in izstopajo iz njega ne glede na dejavnosti drugih uporabnikov.
Arhitektura testiranja obremenitve
V spodnjem diagramu je prikazano, kako različni uporabniki dostopajo do aplikacije. Vsak uporabnik pošlje zahtevo prek interneta, ki se pozneje prenese skozi požarni zid.
Za požarnim zidom je na voljo razpršilnik obremenitve, ki porazdeli obremenitev na katerega koli od spletnih strežnikov, nato pa jo prenese na aplikacijski strežnik in nato na strežnik zbirke podatkov, kjer na podlagi zahteve uporabnika pridobi potrebne informacije.
Testiranje obremenitve lahko opravite ročno in z uporabo orodja. Vendar ročno testiranje obremenitve ni priporočljivo, saj aplikacije ne testiramo za manjšo obremenitev.
Primer : Predpostavimo, da želimo preizkusiti aplikacijo za spletno nakupovanje in preveriti odzivni čas aplikacije za vsak klik uporabnika, tj. korak 1 - zagon URL, odzivni čas, prijava v aplikacijo in zapis odzivnega časa ter tako naprej, kot je izbira izdelka, dodajanje v košarico, plačilo in odjava. Vse to je treba opraviti za 10 uporabnikov.
Torej, ko moramo zdaj preizkusiti obremenitev aplikacije za 10 uporabnikov, lahko to dosežemo tako, da namesto z orodjem ročno obremenimo 10 fizičnih uporabnikov iz različnih računalnikov. V tem primeru je priporočljivo izbrati ročni preizkus obremenitve, namesto da bi vlagali v orodje in vzpostavili okolje za orodje.
Če pa si predstavljamo, da moramo testirati obremenitev za 1500 uporabnikov, potem moramo test obremenitve avtomatizirati s katerim koli od razpoložljivih orodij glede na tehnologije, v katerih je aplikacija zgrajena, in tudi glede na proračun, ki ga imamo za projekt.
Če imamo dovolj denarja, lahko izberemo komercialna orodja, kot je Load runner, če pa nimamo veliko denarja, lahko izberemo odprtokodna orodja, kot je JMeter itd.
Ne glede na to, ali gre za komercialno ali odprtokodno orodje, je treba podrobnosti posredovati stranki, preden orodje dokončno oblikujemo. Običajno se pripravi preizkus koncepta, pri katerem z orodjem ustvarimo vzorčno skripto in stranki pokažemo vzorčna poročila, da odobri orodje, preden ga dokončno oblikujemo.
Pri avtomatiziranem testiranju obremenitve uporabnike nadomestimo s pomočjo orodja za avtomatizacijo, ki posnema dejanja uporabnikov v realnem času. Z avtomatizacijo obremenitve lahko prihranimo tako sredstva kot tudi čas.
Spodaj je diagram, ki prikazuje, kako se uporabniki zamenjajo z orodjem.
Zakaj testiranje obremenitve?
Predpostavimo, da obstaja spletno mesto za spletno nakupovanje, ki v običajnih delovnih dneh deluje precej dobro, tj. uporabniki se lahko prijavijo v aplikacijo, brskajo po različnih kategorijah izdelkov, izbirajo izdelke, dodajajo izdelke v košarico, se odjavijo in odjavijo v sprejemljivem obsegu, pri čemer ni napak na strani ali velikih odzivnih časov.
Medtem pride dan največje obremenitve, recimo dan zahvale, in v sistem je prijavljenih na tisoče uporabnikov, sistem se nenadoma sesuje in uporabniki se zelo počasi odzivajo, nekateri se sploh ne morejo prijaviti na spletno mesto, nekaj jih ni moglo dodati v košarico, nekateri pa se niso mogli odjaviti.
Zato se je podjetje na ta veliki dan soočilo z veliko izgubo, saj je izgubilo veliko strank in poslov. Vse to se je zgodilo samo zato, ker niso predvideli obremenitve uporabnikov za dneve največje obremenitve, tudi če bi jo predvideli, na spletni strani podjetja ni bil opravljen test obremenitve, zato niso vedeli, koliko obremenitve bo aplikacija sposobna prenesti v dneh največje obremenitve.
Zato je za obvladovanje takšnih situacij in premagovanje velikih prihodkov priporočljivo izvesti test obremenitve za tovrstne aplikacije.
- Preizkušanje obremenitve pomaga pri gradnji močnih in zanesljivih sistemov.
- Ozko grlo v sistemu je ugotovljeno dovolj zgodaj, preden aplikacija začne delovati.
- Pomaga pri ugotavljanju zmogljivosti aplikacije.
Kaj se doseže med testom obremenitve?
Z ustreznim testom obremenitve lahko natančno ugotovimo naslednje:
- Število uporabnikov, ki jih sistem lahko upravlja ali jih lahko poveča.
- Odzivni čas vsake transakcije.
- Kako se obnašajo posamezne komponente celotnega sistema pod obremenitvijo, tj. komponente aplikacijskega strežnika, komponente spletnega strežnika, komponente zbirke podatkov itd.
- Katera konfiguracija strežnika je najboljša za obvladovanje obremenitve?
- Ali obstoječa strojna oprema zadostuje ali je potrebna dodatna strojna oprema.
- Ugotovijo se ozka grla, kot so izkoriščenost procesorja, poraba pomnilnika, zamude v omrežju itd.
Okolje
Za izvajanje testov potrebujemo namensko okolje za testiranje obremenitve. Okolje za testiranje obremenitve bo največkrat enako produkcijskemu okolju, prav tako pa bodo podatki, ki so na voljo v okolju za testiranje obremenitve, enaki produkcijskim, čeprav ne gre za iste podatke.
Obstaja več testnih okolij, kot so okolje SIT, okolje QA itd., ta okolja pa niso enaka produkciji, saj za razliko od testiranja obremenitve ne potrebujejo toliko strežnikov ali toliko testnih podatkov za izvajanje funkcionalnega testiranja ali testiranja integracije.
Primer:
V produkcijskem okolju imamo 3 aplikacijske strežnike, 2 spletna strežnika in 2 strežnika zbirke podatkov. V okolju QA imamo samo 1 aplikacijski strežnik, 1 spletni strežnik in 1 strežnik zbirke podatkov. Če torej izvedemo test obremenitve v okolju QA, ki ni enako produkcijskemu, potem naši testi niso veljavni in so tudi nepravilni, zato se ne moremo ravnati po teh rezultatih.
Zato si vedno prizadevajte za testiranje obremenitve imeti namensko okolje, ki je podobno produkcijskemu okolju.
Včasih imamo tudi aplikacije tretjih oseb, ki jih naš sistem kliče, zato lahko v takih primerih uporabimo podstavke, saj ne moremo vedno sodelovati s ponudniki tretjih oseb pri osveževanju podatkov ali drugih vprašanjih ali podpori.
Ko je okolje pripravljeno, poskusite narediti posnetek okolja, tako da lahko, kadar koli želite okolje obnoviti, uporabite ta posnetek, kar vam bo pomagalo pri upravljanju časa. Na trgu je na voljo nekaj orodij za vzpostavitev okolja, kot so Puppet, Docker itd.
Pristop
Preden začnemo test obremenitve, moramo ugotoviti, ali je bil na sistemu že opravljen kakšen test obremenitve ali ne. Če je bil prej opravljen kakšen test obremenitve, potem moramo vedeti, kakšen je bil odzivni čas, zbrane metrike odjemalca in strežnika, kolikšna je bila zmogljivost obremenitve uporabnika itd.
Prav tako potrebujemo informacije o tem, kakšna je trenutna zmožnost obdelave aplikacije. Če gre za novo aplikacijo, moramo razumeti zahteve, kakšna je ciljna obremenitev, kakšen je pričakovani odzivni čas in ali je to res dosegljivo ali ne.
Če gre za obstoječo aplikacijo, lahko zahteve glede obremenitve in vzorce dostopa uporabnikov pridobite iz dnevnikov strežnika. Če gre za novo aplikacijo, pa se morate za vse informacije obrniti na poslovno skupino.
Ko imamo zahteve, moramo ugotoviti, kako bomo izvedli test obremenitve. Ali ga bomo izvedli ročno ali z orodji? Ročno izvajanje testa obremenitve zahteva veliko virov in je tudi zelo drago. Prav tako bo zahtevno test vedno znova ponavljati.
Odprtokodna orodja so na voljo brezplačno in morda nimajo vseh funkcij kot druga komercialna orodja, vendar če je proračun projekta omejen, lahko izberemo odprtokodna orodja.
Komercialna orodja imajo veliko funkcij, podpirajo številne protokole in so uporabniku zelo prijazna.
Naš pristop k testiranju obremenitve bo naslednji:
#1) Določite merila za sprejemljivost preskusa obremenitve
Na primer :
- Odzivni čas strani za prijavo ne sme biti daljši od 5 s niti pri največji obremenitvi.
- Izkoriščenost procesorja ne sme presegati 80 %.
- Prepustnost sistema mora biti 100 transakcij na sekundo.
#2) Določite poslovne scenarije, ki jih je treba preizkusiti.
Ne preizkušajte vseh tokov, ampak poskusite razumeti glavne poslovne tokove, ki naj bi se zgodili v produkciji. Če gre za obstoječo aplikacijo, lahko pridobimo informacije iz dnevnikov strežnika v produkcijskem okolju.
Če gre za novo aplikacijo, moramo sodelovati s poslovnimi ekipami, da bi razumeli vzorce pretoka, uporabo aplikacije itd. Včasih bo projektna skupina izvedla delavnice, na katerih bo podala pregled ali podrobnosti o vsaki komponenti aplikacije.
Udeležiti se moramo delavnice o aplikaciji in zabeležiti vse potrebne informacije za izvedbo preskusa obremenitve.
#3) Modeliranje delovne obremenitve
Ko imamo podrobnosti o poslovnih tokovih, vzorcih dostopa uporabnikov in številu uporabnikov, moramo delovno obremenitev zasnovati tako, da bo posnemala dejansko navigacijo uporabnikov v produkciji ali kot se pričakuje v prihodnosti, ko bo aplikacija v produkciji.
Ključne točke, ki si jih je treba zapomniti pri oblikovanju modela delovne obremenitve, so, da vidimo, koliko časa bo potreboval določen poslovni tok za dokončanje. Pri tem moramo dodeliti čas razmišljanja tako, da bo uporabnik bolj realistično krmaril po aplikaciji.
Vzorec delovne obremenitve bo običajno s preskusom obremenitve s povečevanjem (Ramp up), zmanjševanjem (Ramp down) in ustaljenim stanjem. Sistem moramo počasi obremeniti, zato se uporabljata povečevanje in zmanjševanje obremenitve. Ustaljeno stanje bo običajno enourni preskus obremenitve s 15-minutnim povečevanjem in 15-minutnim zmanjševanjem obremenitve (Ram up).
Vzemimo primer modela delovne obremenitve:
Pregled aplikacije - Predpostavimo spletno nakupovanje, kjer se uporabniki prijavijo v aplikacijo in imajo na voljo široko paleto oblek za nakupovanje, pri čemer se lahko pomikajo med posameznimi izdelki.
Če si želijo ogledati podrobnosti o vsakem izdelku, morajo klikniti na izdelek. Če jim je cena in znamka izdelka všeč, ga lahko dodajo v košarico in ga kupijo z odjavo in plačilom.
V nadaljevanju je naveden seznam scenarijev:
- Brskanje po - Uporabnik zažene aplikacijo, se prijavi v aplikacijo, brska po različnih kategorijah in se odjavi iz aplikacije.
- Brskanje, ogled izdelka, Dodaj v košarico - V tem primeru se uporabnik prijavi v aplikacijo, brska po različnih kategorijah, pregleda podrobnosti o izdelku, doda izdelek v košarico in se odjavi.
- Brskanje, ogled izdelkov, dodajanje v košarico in odjava - V tem scenariju se uporabnik prijavi v aplikacijo, brska po različnih kategorijah, pregleda podrobnosti o izdelku, doda izdelek v košarico, opravi odjavo in se odjavi.
- Brskanje, ogled izdelka, Dodaj v košarico Odjava in plačilo - V tem primeru se uporabnik prijavi v aplikacijo, brska po različnih kategorijah, pregleduje podrobnosti o izdelku, doda izdelek v košarico, se odjavi, opravi plačilo in se odjavi.
S.št. | Poslovni tok | Število transakcij | Obremenitev virtualnega uporabnika | Odzivni čas (s) | % Dovoljena stopnja neuspeha | Transakcije na uro |
---|---|---|---|---|---|---|
1 | Brskanje po | 17 | 1600 | 3 | Manj kot 2 % | 96000 |
2 | Brskanje, ogled izdelka, Dodaj v košarico | 17 | 200 | 3 | Manj kot 2 % | 12000 |
3 | Brskanje, ogled izdelkov, dodajanje v košarico in odjava | 18 | 120 | 3 | Manj kot 2 % | 7200 |
4 | Brskanje, ogled izdelka, Dodaj v košarico Odjava in plačilo | 20 | 80 | 3 | Manj kot 2 % | 4800 |
Zgornje vrednosti so bile izračunane na podlagi naslednjih izračunov:
- Transakcije na uro = število uporabnikov*Transakcije, ki jih opravi en uporabnik v eni uri.
- Število uporabnikov = 1600.
- Skupno število transakcij v scenariju Brskanje = 17.
- Odzivni čas za vsako transakcijo = 3.
- Skupni čas, v katerem en uporabnik opravi 17 transakcij = 17*3 = 51, zaokroženo na 60 s (1 min).
- Število transakcij na uro = 1600*60 = 96000 transakcij.
#4) Načrtovanje preskusov obremenitve - Test obremenitve je treba zasnovati na podlagi podatkov, ki smo jih do zdaj zbrali, tj. poslovnih tokov, števila uporabnikov, vzorcev uporabnikov, metrik, ki jih je treba zbrati in analizirati. Poleg tega je treba teste zasnovati na zelo realističen način.
#5) Izvedite test obremenitve - Preden izvedemo test obremenitve, se prepričajte, da aplikacija deluje. Okolje za test obremenitve je pripravljeno. Aplikacija je funkcionalno preizkušena in stabilna.
Preverite konfiguracijske nastavitve okolja za testiranje obremenitve. Biti morajo enake kot v produkcijskem okolju. Zagotovite, da so na voljo vsi podatki za testiranje. Poskrbite, da dodate potrebne števce za spremljanje delovanja sistema med izvajanjem testa.
Vedno začnite z majhno obremenitvijo in jo postopoma povečujte. Nikoli ne začnite s polno obremenitvijo in ne prekinite sistema.
#6) Analizirajte rezultate preskusa obremenitve - Pripravite osnovni test, ki ga lahko vedno primerjate z ostalimi testnimi zagoni. Po izvedbi testa zberite metrike in dnevnike strežnika, da bi našli ozka grla.
Pri nekaterih projektih se za spremljanje sistema med testnim izvajanjem uporabljajo orodja za spremljanje delovanja aplikacij, ki pomagajo lažje ugotoviti glavni vzrok in prihranijo veliko časa. S temi orodji je zelo enostavno najti glavni vzrok za ozko grlo, saj imajo širok pregled, s katerim lahko natančno ugotovijo, kje je težava.
Nekatera orodja APM na trgu vključujejo DynaTrace, Wily Introscope, App Dynamics itd.
#7) Poročanje - Ko je testiranje končano, zberite vse metrike in zadevni ekipi pošljite zbirno poročilo o testiranju s svojimi opažanji in priporočili.
Najboljše prakse
Seznam orodij za testiranje zmogljivosti, ki so na voljo na trgu za izvajanje izključnega testiranja obremenitve.
Zaključek
V tem učbeniku smo se naučili, kako pomembno vlogo ima testiranje obremenitve pri testiranju zmogljivosti aplikacije, kako pomaga razumeti učinkovitost in zmogljivost aplikacije itd.
Spoznali smo tudi, kako pomaga predvideti, ali je za aplikacijo potrebna dodatna strojna ali programska oprema ali nastavitve.
Srečno branje!