Što je testiranje skalabilnosti? Učite s primjerom
⚡ Pametni sažetak
Testiranje skalabilnosti mjeri kako se aplikacija ponaša kada se opterećenje korisnika, količina podataka ili brzina transakcija povećaju ili smanje, otkrivajući točnu točku u kojoj performanse prestaju skalirati i identificirajući odgovorno usko grlo.
Što je testiranje skalabilnosti?
Testiranje skalabilnosti je metoda nefunkcionalnog testiranja koja mjeri performanse sustava ili mreže kada se broj korisničkih zahtjeva poveća ili smanji. Svrha testiranja skalabilnosti je osigurati da sustav može podnijeti predviđeno povećanje korisničkog prometa, količine podataka i učestalosti transakcija. Testira sposobnost sustava da zadovolji rastuću potražnju.
Testiranje skalabilnosti je podvrsta ispitivanje performansi, pa se koncentrira na ponašanje aplikacije kada se implementira na veći sustav ili se koristi pod prekomjernim opterećenjem. U Programsko inženjerstvo, Testiranje skalabilnosti mjeri točku u kojoj aplikacija prestaje skalirati i identificira razlog za to.
Zašto provoditi testiranje skalabilnosti?
Problemi s kapacitetom rijetko se pojavljuju tijekom funkcionalnog testiranja. Pojavljuju se na najprometniji trgovački dan u godini, kada započne marketinška kampanja ili kada skup podataka koji je tiho rastao dvije godine konačno uspori svaki upit. Testiranje skalabilnosti prvo otkriva ta ograničenja u kontroliranom okruženju. Konkretno, pomaže vam:
- Odredite kako se aplikacija skalira s povećanjem radnog opterećenja i gdje se ta krivulja izravnava.
- Odredite ograničenje broja istovremenih korisnika za web aplikaciju prije nego što vrijeme odziva postane neprihvatljivo.
- Utvrdite degradaciju na strani klijenta i korisničko iskustvo pod opterećenjem, kao što je sporo renderiranje zaslona.
- Odredite robusnost i degradaciju na strani poslužitelja, uključujući zasićenost CPU-a, curenje memorije i iscrpljenost skupa veza.
Odnos je najlakše prikazati kao krivulju: propusnost raste uz dodano opterećenje sve dok se resurs ne zasiti, nakon čega dodatni korisnici samo produžuju red čekanja.
Vrste testiranja skalabilnosti
Skalabilnost nije jedno svojstvo, pa plan testiranja obično pokriva više od jedne dimenzije. Četiri vrste u nastavku su one koje mjeri većina timova, a prve dvije određuju oblik samog testnog okruženja.
| Tip | Što je skalirano | Što test dokazuje |
|---|---|---|
| Vertikalna skalabilnost (povećanje skale) | CPU, memorija ili pohrana dodani jednom poslužitelju | Koliko dodatnog opterećenja apsorbira jedan nadograđeni stroj i gdje se nalazi strop s jednim čvorom |
| Horizontalna skalabilnost (skaliranje) | Dodatni poslužitelji, kontejneri ili čvorovi iza uravnoteživača opterećenja | Raste li propusnost otprilike proporcionalno dodanim čvorovima ili je ograničavaju dijeljeni resursi |
| Funkcionalna skalabilnost | Nove značajke, moduli ili usluge | Može li se dodana funkcionalnost apsorbirati bez narušavanja postojećih transakcija |
| Administrativna skalabilnost | Korisnici, zakupci, timovi ili okruženja za upravljanje | Ostaju li uvođenje u posao, dozvole i praćenje funkcionalnima kako organizacija raste |
Vertikalno skaliranje je jednostavnije jer se arhitektura rijetko mijenja, ali jedno računalo uvijek ima ograničenje. Horizontalno skaliranje uklanja to ograničenje i poboljšava toleranciju grešaka, nauštrb latencije mreže, konzistentnosti podataka i opterećenja koordinacije - sve to test mora mjeriti, a ne pretpostavljati.
Što testirati u testiranju skalabilnosti
Skalabilnost se procjenjuje na temelju mjerenja, a ne prikaza. Zabilježite sljedeće atribute pri svakom koraku učitavanja kako bi bio vidljiv trend, a ne samo konačni broj.
| Atribut | Što vam govori |
|---|---|
| Vrijeme odziva | Vrijeme između korisničkog zahtjeva i odgovora sustava; trebalo bi ostati nepromijenjeno kako se konkurentnost povećava |
| Prijelaz zaslona | Koliko brzo jedna stranica ili prikaz ustupa mjesto sljedećem pod opterećenjem |
| propusnost | Količina obrađenih zahtjeva po jedinici vremena; plato označava granicu skalabilnosti |
| Mjerenja vremena | Vrijeme sesije, vrijeme ponovnog pokretanja, vrijeme ispisa, vrijeme transakcije i vrijeme izvršavanja zadatka |
| Performanse u odnosu na broj korisnika | Kako se svaka metrika pomiče kako se istovremeni korisnici dodaju u koracima |
| Zatražite cijene | Zahtjevi u sekundi, transakcije u sekundi i pogoci u sekundi |
| Korištenje mreže | Potrošena propusnost i latencija paketa između slojeva |
| Korištenje CPU-a i memorije | Trošak resursa po transakciji; stalno rastuća brojka često signalizira curenje |
| Brojači web poslužitelja | Zahtjevi i odgovori u sekundi, dubina reda čekanja i odbijene veze |
| Performanse pod opterećenjem | Kombinirano ponašanje nakon što se svaka metrika pročita zajedno na vrhuncu |
Strategija testiranja za testiranje skalabilnosti
Strategija testiranja skalabilnosti razlikuje se ovisno o vrsti aplikacije koja se testira. Ako aplikacija pristupi baza podataka, parametri testiranja uključivat će veličinu baze podataka u odnosu na broj korisnika i tako dalje.
Preduvjeti za testiranje skalabilnosti
- Sposobnost raspodjele opterećenja — Provjerite omogućuje li alat za ispitivanje opterećenja generiranje opterećenja iz više strojeva i upravljanje s centralne točke.
- Operating sustav — Provjerite što Operativnih sustava Agenti za generiranje opterećenja i glavni program za testiranje opterećenja rade pod njima.
- Procesor — Provjerite koja je vrsta CPU-a potrebna za virtualnog korisničkog agenta i glavni procesor za testiranje opterećenja.
- memorija — Provjerite koliko memorije bi bilo dovoljno za virtualnog korisničkog agenta i glavnog servera za testiranje opterećenja.
- Ispitna okolina — Provjerite da okruženje ispitivanja dovoljno dobro odražava proizvodnju da se rezultati mogu prenijeti.
Kako napraviti testiranje skalabilnosti
- Definirajte ponovljivi proces za izvršavanje testova skalabilnosti tijekom životnog ciklusa aplikacije
- Odredite kriterije za skalabilnost
- Uži izbor softverskih alata potrebnih za izvođenje testa opterećenja
- Postavite okolinu testiranja i konfigurirajte hardver potreban za izvođenje testova skalabilnosti
- Planirajte testne scenarije kao i testove skalabilnosti
- Izradite i provjerite skriptu virtualnog korisnika
- Stvorite i provjerite scenarije testiranja opterećenja
- Izvršite testove
- Ocijenite rezultate
- Generirajte potrebna izvješća
Plan testiranja skalabilnosti
Prije nego što zapravo stvorite testove, razvijte detaljan plan testiranja. Važan je korak osigurati da test odgovara zahtjevima aplikacije.
Slijede atributi za stvaranje dobro definiranog Plan testiranja za testiranje skalabilnosti.
- Koraci za skripteTestni skript trebao bi imati detaljne korake koji određuju točne radnje koje bi korisnik izvršio.
- Podaci o vremenu izvođenjaPlan testiranja trebao bi odrediti sve podatke tijekom izvođenja koji su potrebni za interakciju s aplikacijom.
- Testovi vođeni podacimaAko skripte trebaju različite podatke tijekom izvođenja, potrebno je razumjeti sva polja koja zahtijevaju te podatke.
Primjer testiranja skalabilnosti
Razmotrimo online trgovinu koja očekuje 2,000 istovremenih kupaca tijekom sezonske rasprodaje. Tim se prvo dogovori o kriteriju prolaza: transakcija plaćanja mora se završiti za manje od tri sekunde za 95 posto korisnika, sa stopom pogreške ispod jedan posto.
Test zatim pokreće isti skript za pregledavanje-pretraživanje-košarica-naplatu na 250, 500, 1,000, 1,500 i 2,000 virtualnih korisnika. Vrijeme odziva drži se oko dvije sekunde do 1,000 korisnika, smanjuje se na 2.8 sekundi na 1,500 i doseže devet sekundi na 2,000, dok je CPU baze podataka na 98 posto. Granica skalabilnosti je stoga otprilike 1,500 korisnika, a usko grlo je sloj baze podataka - a ne aplikacijski poslužitelji koje je tim planirao dodati.
Alati za testiranje skalabilnosti
Testiranje skalabilnosti zahtijeva alat koji može generirati opterećenje s nekoliko strojeva odjednom i centralno izvještavati o rezultatima. Izbor obično slijedi primarni jezik tima i protokole koji se testiraju.
| Oruđe | Scripting | Najprikladniji za |
|---|---|---|
| Apache JMeter | GUI plus XML planovi testiranja, Java temelji se | Široka pokrivenost protokola, uključujući JDBC, JMS, LDAP i SOAP |
| Grafana k6 | JavaSkripta ili TypeScript | API i mikroservisni testovi povezani u CI/CD cjevovod |
| Gatling | Java, Kotlin ili Scala DSL | Visok broj virtualnih korisnika po injektoru s detaljnim HTML izvješćima |
| Skakavac | Običan Python | Python timovi koji trebaju proširiti klijenta izvan HTTP-a |
| LoadRunner | C-slične skripte snimljene u VuGenu | Velika poduzeća sa starim i paketnim aplikacijama |
Trkači hostirani u oblaku kao što su BlazeMeter, LoadView i Gatling Enterprise nalaze se na vrhu nekoliko ovih tražilica i vrijedi ih razmotriti kada testu trebaju deseci tisuća virtualnih korisnika ili promet iz više geografskih regija. Širi pregled kategorije dostupan je u vodiču za alati za testiranje performansi.
Izazovi i najbolje prakse u testiranju skalabilnosti
Najrazočaravajući rezultati skalabilnosti tracnatrag na postavke testa, a ne na aplikaciju. To su problemi koji se ponavljaju i navike koje ih sprječavaju.
Uobičajeni izazovi
- Premala okruženja — Ispitni sustav s upola manje produkcijske memorije prijavljuje usko grlo koje ne postoji u produkciji.
- Nerealni modeli radnog opterećenja — Skripte bez vremena razmišljanja ili varijacije podataka pogađaju predmemorije koje bi stvarni korisnici propustili.
- Bučni rezultati — Automatsko skaliranje, sakupljanje smeća i dijeljeni hardver u oblaku čine dva identična pokretanja neskladnima.
- Tanka uočljivost — Bez metrike na strani poslužitelja, spor rezultat pokazuje da je nešto pokvareno, ali ne i što.
- Trošak — Generiranje vrlo visoke konkurentnosti zahtijeva vlastitu flotu generatora opterećenja, što je lako podcijeniti.
Najbolje prakse
- Prije prvog pokretanja dogovorite kriterije prolaza, kao što su percentil vremena odziva i gornja granica stope pogrešaka.
- Povećajte opterećenje u planiranim koracima i zadržite svaki korak dovoljno dugo da se sustav smiri.
- Razlikujte testne podatke po virtualnom korisniku kako keširanje ne bi laskalo rezultatima.
- Prikupljajte metrike aplikacija, baza podataka i infrastrukture uz brojke na strani klijenta.
- Pohranite testne skripte u kontrolu verzija i pokrenite kratku provjeru skalabilnosti na svakoj izradi, a zatim potpunu provjeru prije objavljivanja.
- Usporedite trendove među verzijama umjesto da procjenjujete jedno izvješće zasebno.
Testiranje skalabilnosti u odnosu na testiranje opterećenja
To dvoje se često miješa jer oba primjenjuju opterećenje. Razlika leži u pitanju na koje svako odgovara: Testiranje skalabilnosti pita koliko sustav može rasti, dok ispitivanje opterećenja pita može li se nositi s već očekivanim opterećenjem.
| Temelj | Testiranje skalabilnosti | Testiranje opterećenja |
|---|---|---|
| Fokus | Fokusira se na performanse vaših web stranica, softvera, hardvera i aplikacija kada se mijenja veličina ili volumen sustava kako bi se zadovoljile rastuće potrebe. | Testiranje opterećenja fokusira se na testiranje aplikacije pod velikim opterećenjima kako bi se utvrdilo u kojem trenutku dolazi do prekida vremena odziva sustava. |
| Uzorak opterećenja | Teret se povećava u koracima, a resursi se mogu dodavati između koraka | Opterećenje se održava na očekivanom vrhuncu tijekom fiksnog trajanja |
| Odgovoreno na pitanje | Koliko daleko se ovaj sustav može razviti i što ga ograničava? | Ispunjava li ovaj sustav danas svoje dogovorene ciljeve? |
| Tipični izlaz | Ograničenje skalabilnosti, usko grlo i plan kapaciteta | Prolaz ili pad u odnosu na ciljeve vremena odziva i propusnosti |
Oboje sjede ispod nefunkcionalno testiranje kišobran uz testiranje otpornosti na stres, testiranje šiljaka, ispitivanje izdržljivosti i ispitivanje volumena, a zrela strategija performansi obično ih pokreće nekoliko uz iste skripte.

