Ce este testarea de scalabilitate? Învață cu Exemplu

⚡ Rezumat inteligent

Testarea scalabilității măsoară modul în care se comportă o aplicație atunci când sarcina utilizatorului, volumul de date sau rata tranzacțiilor cresc sau scad, dezvăluind punctul exact în care performanța se oprește scalarea și identificând blocajul responsabil.

  • 🔘 Definiție: Un test nefuncțional care verifică dacă un sistem încă funcționează acceptabil pe măsură ce cererea crește.
  • ☑️ Două direcții: Scalarea verticală adaugă putere unei singure mașini; scalarea orizontală adaugă mai multe mașini în spatele unui echilibrator.
  • Valori cheie: Timpul de răspuns, debitul, utilizarea CPU și a memoriei și utilizarea rețelei sunt tracked la fiecare pas de încărcare.
  • 🧪 Metodă: Încărcarea crește în trepte planificate până când o metrică depășește pragul său, care marchează limita de scalabilitate.
  • 🛠️ scule: JMeter, k6, Gatling, Locust și LoadRunner generează sarcină distribuită și înregistrează rezultatele automat.
  • 📈 Rezultat: Planificarea capacității devine bazată pe dovezi în loc să se bazeze pe presupuneri, astfel încât lansările să supraviețuiască vârfurilor de trafic.

Ce este testarea scalabilității

Ce este testarea de scalabilitate?

Testare de scalabilitate este o metodă de testare nefuncțională care măsoară performanța unui sistem sau a unei rețele atunci când numărul de solicitări ale utilizatorilor este scalat în sus sau în jos. Scopul testării scalabilității este de a se asigura că sistemul poate gestiona o creștere preconizată a traficului utilizatorilor, a volumului de date și a frecvenței tranzacțiilor. Aceasta testează capacitatea sistemului de a satisface cererea în creștere.

Testarea scalabilității este un subtip de test de performanta, deci se concentrează pe comportamentul unei aplicații atunci când este implementată pe un sistem mai mare sau este exercitată sub sarcină excesivă. În Inginerie SoftwareTestarea scalabilității măsoară punctul în care o aplicație se oprește din scalare și identifică motivul din spatele acestui lucru.

De ce se face testarea scalabilității?

Problemele de capacitate apar rareori în timpul testării funcționale. Acestea ies la iveală în cea mai aglomerată zi de tranzacționare a anului, când începe o campanie de marketing sau când un set de date care a crescut în liniște timp de doi ani încetinește în cele din urmă fiecare interogare. Testarea scalabilității expune aceste limite mai întâi într-un mediu controlat. Mai exact, vă ajută să:

  • Determinați cum se scalează aplicația pe măsură ce volumul de lucru crește și unde se aplatizează această curbă.
  • Determinați limita de utilizatori simultani pentru aplicația web înainte ca timpii de răspuns să devină inacceptabili.
  • Determinați degradarea la nivelul clientului și experiența utilizatorului final sub sarcină, cum ar fi randarea lentă a ecranului.
  • Determinarea robusteții și degradării la nivelul serverului, inclusiv saturația procesorului, pierderile de memorie și epuizarea pool-ului de conexiuni.

Relația este cel mai ușor de imaginat sub forma unei curbe: debitul crește odată cu sarcina adăugată până când o resursă se saturează, după care utilizatorii suplimentari nu fac decât să prelungească coada.

Testarea scalabilității măsoară performanța sistemului pe măsură ce volumul de muncă crește

Tipuri de testare a scalabilității

Scalabilitatea nu este o proprietate singulară, așa că un plan de testare acoperă de obicei mai mult de o dimensiune. Cele patru tipuri de mai jos sunt cele pe care le măsoară majoritatea echipelor, iar primele două decid forma mediului de testare în sine.

Tip Ce este scalat Ce dovedește testul
Scalabilitate verticală (creștere) CPU, memorie sau stocare adăugate la un singur server Câtă sarcină suplimentară absoarbe o mașină modernizată și unde se află plafonul cu un singur nod
Scalabilitate orizontală (scalare laterală) Servere, containere sau noduri suplimentare în spatele unui echilibrator de încărcare Dacă debitul crește aproximativ proporțional cu nodurile adăugate sau dacă resursele partajate îl limitează
Scalabilitate funcțională Funcții, module sau servicii noi Dacă funcționalitatea adăugată poate fi absorbită fără a degrada tranzacțiile existente
Scalabilitate administrativă Utilizatori, entități găzduite, echipe sau medii de gestionat Indiferent dacă procesul de integrare, permisiunile și monitorizarea rămân funcționale pe măsură ce organizația crește

Scalarea verticală este mai simplă deoarece arhitectura se schimbă rar, dar o singură mașină are întotdeauna un plafon. Scalarea orizontală elimină acest plafon și îmbunătățește toleranța la erori, cu prețul latenței rețelei, consistenței datelor și cheltuielilor generale de coordonare - toate acestea pe care testul trebuie să le măsoare, nu să le presupună.

Ce trebuie testat în testarea scalabilității

Scalabilitatea se evaluează în funcție de măsurători, nu de afișări. Înregistrați următoarele atribute la fiecare etapă de încărcare, astfel încât tendința, și nu doar numărul final, să fie vizibilă.

Atribut Ce iti spune
Timp de raspuns Timpul dintre o solicitare a utilizatorului și răspunsul sistemului; acesta ar trebui să rămână constant pe măsură ce concurența crește
Tranziția ecranului Cât de repede o pagină sau o vizualizare cedează locul următoarei sub sarcină
tranzitată Volumul de cereri procesate pe unitatea de timp; un platou marchează limita de scalabilitate
Măsurători de timp Timpul sesiunii, timpul de repornire, timpul de imprimare, timpul tranzacției și timpul de execuție a sarcinii
Performanță în raport cu numărul de utilizatori Cum se modifică fiecare metrică pe măsură ce utilizatorii concurenți sunt adăugați în trepte
Solicitați tarife Cereri pe secundă, tranzacții pe secundă și accesări pe secundă
Utilizarea rețelei Lățimea de bandă consumată și latența pachetelor între niveluri
Utilizarea procesorului și a memoriei Costul resurselor per tranzacție; o cifră în continuă creștere semnalează adesea o scurgere de informații
Contoare de servere web Cereri și răspunsuri pe secundă, adâncimea cozii și conexiuni respinse
Performanță sub sarcină Comportament combinat odată ce fiecare metrică este citită împreună la vârf

Strategie de testare pentru testarea scalabilității

Strategia de testare pentru testarea scalabilității diferă în funcție de tipul de aplicație testată. Dacă o aplicație accesează un Baza de date, parametrii de testare vor include dimensiunea bazei de date în raport cu numărul de utilizatori și așa mai departe.

Cerințe preliminare pentru testarea scalabilității

  • Capacitatea de distribuție a încărcăturii — Verificați dacă instrumentul de testare a sarcinii permite generarea sarcinii de la mai multe mașini și controlul acesteia dintr-un punct central.
  • Operating System — Verifică ce sisteme de operare agenții de generare a încărcării și masterul de testare a încărcării rulează sub.
  • procesor — Verificați ce tip de CPU este necesar pentru agentul utilizator virtual și masterul de testare a încărcării.
  • Memorie — Verificați câtă memorie ar fi suficientă pentru agentul utilizator virtual și masterul de testare a încărcării.
  • Mediu de testare — Verificați dacă mediu de testare oglindește producția suficient de îndeaproape pentru ca rezultatele să fie transferate.

Cum se face testarea de scalabilitate

  1. Definiți un proces repetabil pentru executarea testelor de scalabilitate pe tot parcursul ciclului de viață al aplicației
  2. Determinați criteriile de scalabilitate
  3. Lista scurtă a instrumentelor software necesare pentru a rula testul de încărcare
  4. Setați mediul de testare și configurați hardware-ul necesar pentru a executa testele de scalabilitate
  5. Planificați scenariile de testare, precum și testele de scalabilitate
  6. Creați și verificați scriptul utilizatorului virtual
  7. Creați și verificați scenariile de testare a sarcinii
  8. Executați testele
  9. Evaluează rezultatele
  10. Generați rapoartele necesare

Planul de testare a scalabilitatii

Înainte de a crea efectiv testele, dezvoltați un plan de testare detaliat. Este un pas important pentru a vă asigura că testul este conform cerințelor aplicației.

Următoarele sunt atributele pentru a crea un bine definit Planul de testare pentru testarea scalabilității.

  • Pași pentru ScripturiScriptul de testare ar trebui să conțină pași detaliați care să determine acțiunile exacte pe care le-ar efectua un utilizator.
  • Date de rularePlanul de testare ar trebui să determine orice date de execuție necesare pentru interacțiunea cu aplicația.
  • Teste bazate pe dateDacă scripturile necesită date variabile în timpul execuției, trebuie să înțelegeți toate câmpurile care necesită aceste date.

Exemplu de testare a scalabilității

Să luăm în considerare un magazin online care așteaptă 2,000 de cumpărători simultani în timpul unei reduceri sezoniere. Echipa convine mai întâi asupra unui criteriu de trecere: tranzacția de finalizare a comenzii trebuie să se finalizeze în mai puțin de trei secunde pentru 95% dintre utilizatori, cu o rată de eroare sub un procent.

Testul rulează apoi același script browse-search-cart-checkout la 250, 500, 1,000, 1,500 și 2,000 de utilizatori virtuali. Timpul de răspuns se menține în apropierea a două secunde până la 1,000 de utilizatori, scade la 2.8 secunde la 1,500 și ajunge la nouă secunde la 2,000, în timp ce CPU-ul bazei de date este la 98%. Prin urmare, limita de scalabilitate este de aproximativ 1,500 de utilizatori, iar blocajul este nivelul bazei de date - nu serverele de aplicații pe care echipa plănuise să le adauge.

Instrumente de testare a scalabilității

Testarea scalabilității necesită un instrument care poate genera încărcare de pe mai multe mașini simultan și poate raporta rezultatele centralizat. Alegerea se face de obicei în funcție de limbajul principal al echipei și de protocoalele testate.

Instrument scripting Cel mai potrivit pentru
Apache JMeter Planuri de testare GUI plus XML, Java bazat Acoperire largă de protocoale, inclusiv JDBC, JMS, LDAP și SOAP
Grafana k6 JavaScript sau TypeScript Teste API și microservicii conectate la o conductă CI/CD
gatling Java, Kotlin sau Scala DSL Număr mare de utilizatori virtuali per injector, cu rapoarte HTML detaliate
roșcov Simplu Python Python echipe care trebuie să extindă clientul dincolo de HTTP
LoadRunner Scripturi de tip C înregistrate în VuGen Sisteme de operare de dimensiuni mari, cu aplicații vechi și pachete

Alergători găzduiți în cloud, cum ar fi BlazeMeterLoadView și Gatling Enterprise se află pe lângă mai multe dintre aceste motoare și merită luate în considerare atunci când un test are nevoie de zeci de mii de utilizatori virtuali sau trafic din mai multe regiuni geografice. O analiză mai amplă a categoriei este disponibilă în ghidul pentru instrumente de testare a performanței.

Provocări și cele mai bune practici în testarea scalabilității

Cele mai dezamăgitoare rezultate de scalabilitate tracRevenim la configurația de testare, nu la aplicație. Acestea sunt problemele care reapar și obiceiurile care le previn.

Provocări comune

  • Medii subdimensionate — Un banc de testare cu jumătate din memoria de producție raportează un blocaj care nu există în producție.
  • Modele de sarcină de lucru nerealiste — Scripturile fără timp de gândire sau variație a datelor accesează memorii cache pe care utilizatorii reali le-ar rata.
  • Rezultate zgomotoase — Scalarea automată, colectarea gunoiului și hardware-ul cloud partajat fac ca două rulări identice să fie în contradicție.
  • Observabilitate subțire — Fără valori măsurabile pe server, un rezultat lent arată că ceva s-a stricat, dar nu și ce anume.
  • Costat — Generarea unei concurențe foarte mari necesită propria flotă de generatoare de sarcină, ceea ce este ușor de subestimat în buget.

Cele mai bune practici

  • Stabiliți criteriile de trecere, cum ar fi o percentilă a timpului de răspuns și un plafon al ratei de eroare, înainte de prima rulare.
  • Măriți sarcina în etapele planificate și mențineți fiecare etapă suficient de mult timp pentru ca sistemul să se stabilizeze.
  • Variați datele de testare pentru fiecare utilizator virtual, astfel încât memorarea în cache să nu influențeze negativ rezultatele.
  • Colectați indicatori de aplicație, bază de date și infrastructură, alături de cifrele de pe partea clientului.
  • Stocați scripturile de testare în controlul versiunilor și rulați o scurtă verificare a scalabilității la fiecare compilare, apoi o rulare completă înainte de lansare.
  • Comparați tendințele între versiuni, în loc să judecați un singur raport în mod izolat.

Testarea scalabilității vs. testarea încărcării

Cele două sunt adesea confundate deoarece ambele aplică sarcină. Diferența constă în întrebarea la care răspunde fiecare: Testarea Scalabilității întreabă cât de mult poate crește sistemul, în timp ce testarea sarcinii întreabă dacă face față încărcăturii deja așteptate.

Bază Testare de scalabilitate Încărcarea testelor
Focus Se concentrează pe performanța site-urilor web, software-ului, hardware-ului și aplicațiilor dvs. atunci când se fac modificări la dimensiunea sau volumul sistemului pentru a satisface o nevoie tot mai mare. Testarea încărcării se concentrează pe testarea unei aplicații sub sarcini mari, pentru a determina în ce punct timpul de răspuns al sistemului eșuează.
Model de încărcare Sarcina este crescută în etape, iar resursele pot fi adăugate între etape Sarcina este menținută la un vârf așteptat pentru o durată fixă
Întrebare răspunsă Cât de mult poate crește acest sistem și ce îl limitează? Își îndeplinește acest sistem obiectivele convenite astăzi?
Ieșire tipică O limită de scalabilitate, un blocaj și un plan de capacitate O evaluare de succes sau eșec în funcție de timpul de răspuns și obiectivele de debit

Amândoi stau sub testarea nefuncțională umbrelă alături testare stresanta, testarea vârfurilor, testare de anduranță și testarea volumului...iar o strategie de performanță matură rulează de obicei mai multe dintre ele pe aceleași scripturi.

Întrebări frecvente

Modelele de învățare automată citesc datele istorice ale rulării pentru a semnala care metrică a deviat prima, a separa regresiile reale de zgomotul din cloud și a prognoza nivelul de încărcare la care o resursă se va satura. Mai multe platforme comerciale oferă acum acest lucru ca analiză automată post-rulare.

Da. Copilot și agenți similari recrutează k6 sau scenarii Locust, generează date de testare parametrizate și schemează rapid pașii din pipeline-ul CI. Un inginer de performanță trebuie în continuare să stabilească timpi de gândire realiști, combinații de sarcini de lucru și criterii de trecere, deoarece acestea provin din comportamentul producției.

Scalabilitatea este capacitatea de creștere atunci când se adaugă resurse, indiferent dacă acest lucru durează câteva minute sau luni. Elasticitatea este abilitatea de a adăuga și elibera automat aceste resurse pe măsură ce cererea se modifică, apoi de a reveni la amprenta mai mică ulterior.

Începeți cu mult sub vârful așteptat, adesea cu zece până la douăzeci la sută, pentru a confirma scenariul și munca de monitorizare. Creșteți numărătoarea în pași pari către țintă și dincolo de aceasta, deoarece comportamentul interesant apare între doi pași, mai degrabă decât la un singur număr.

Un singur computer de birou nu poate genera zeci de mii de sesiuni și nu poate reproduce latența pe care o experimentează un utilizator dintr-o altă regiune. Testare în cloud furnizează generatoare de sarcină în mai multe regiuni la cerere și le eliberează la finalizarea rulării.

Executați o verificare scurtă la fiecare versiune, astfel încât regresiile să apară în decurs de o zi, și o verificare completă pas cu pas înainte de orice lansare care modifică arhitectura, schema bazei de date sau așteptările de trafic. Așteptarea până săptămânii dinaintea lansării nu lasă timp pentru a corecta ceea ce găsește testul.

Dincolo de tranzacțiile pierdute în timpul perioadei de întrerupere a serviciului, paginile lente împing vizitatorii către competitori și afectează clasamentele în căutări. În cazul comerțului cu amănuntul și al vânzării de bilete, defecțiunea apare de obicei în ziua cu cele mai mari venituri din an, exact atunci când traficul era previzibil.

Scriptare în Javascenariu, Python or Java, cunoștințe practice despre comportamentul HTTP și al bazelor de date, citirea ușoară a valorilor indicatorilor serverului și containerelor și suficiente statistici pentru a distinge o percentilă de o medie. Familiarizarea cu cloud-ul și CI/CD a devenit aproape esențială.

Rezumați această postare cu: