Testare de încărcare API cu Locust

Testare de încărcare API cu Locust

Testare de încărcare API cu Locust: Introducere

Probabil că ați mai fost în această situație: scrieți cod care face ceva, un punct final de exemplu. Îți testezi punctul final folosind Postman sau Insomnia și totul funcționează bine. Transmiteți punctul final dezvoltatorului din partea clientului, care apoi consumă API și implementează aplicația. Dar apoi, API-ul eșuează atunci când utilizatorii folosesc aplicația.

Aceasta poate fi o situație super enervantă, ca să nu mai vorbim de costisitoare pentru o afacere. Acesta este motivul pentru care dezvoltatorii de software efectuează o varietate de teste pe sistemele software pentru a se asigura că funcționează conform așteptărilor. API-urile nu sunt diferite. Înainte de implementare, ar trebui să faceți cel puțin teste de performanță și teste de securitate.

Testele de performanță pot fi grupate în teste de funcționalitate și teste de încărcare. Testele de funcționalitate sunt pentru care utilizați de obicei Postman sau Insomnia. Ei se asigură că API-ul dumneavoastră funcționează așa cum vă așteptați. Testele de încărcare, pe de altă parte, sunt mai preocupate de modul în care funcționează API-ul dvs. cu utilizarea în lumea reală și sarcina maximă și despre asta este vorba în acest articol. Să ne uităm la testele de încărcare mai detaliat.

Ce este testarea încărcării API?

Testarea de încărcare API este un tip de testare pe care dezvoltatorii îl folosesc pentru a simula sarcina normală și de vârf la punctele finale. Acest tip de testare le permite dezvoltatorilor să evalueze performanța în lumea reală a unui API înainte de a fi implementat. Îi ajută să identifice capacitatea maximă de operare a unui sistem, blocajele, dacă există, și degradarea performanței. Testele de încărcare API sunt de obicei realizate prin crearea de utilizatori virtuali și apoi folosirea acestora pentru a testa funcționalitatea API-ului simultan. 

Testele de încărcare API măsoară valori precum timpul de răspuns, utilizatorii concurenți, ratele de debit, nivelurile de utilizare a resurselor, timpul mediu între eșecuri (MTBF), timpul mediu până la eșec (MTTF) și așa mai departe. Toate aceste valori pot fi folosite pentru a determina cât de bine se descurcă API-ul.

Tipuri de testare la sarcină

Există mai multe tipuri de testare a sarcinii, fiecare cu cazurile sale de utilizare. Să aruncăm o privire la unele dintre ele.

Testare de sarcină: Aceasta este forma de bază a unui test de sarcină. Este folosit pentru a evalua performanța unui sistem (în acest caz, un API) sub sarcină normală și sarcină maximă așteptată.

Testare stresanta: Acesta este utilizat pentru a evalua performanța unui sistem sub o sarcină foarte mare. Scopul acestui test este de a vedea dacă un sistem se recuperează după defecțiune și cât timp durează pentru a face acest lucru. Sarcina este de obicei crescută lent până depășește capacitățile sistemului.

Testarea vârfurilor: Acest lucru este puțin similar cu testarea la stres, cu excepția faptului că o sarcină mare este aplicată brusc, spre deosebire de creșterea lent. Acest tip de test reprezintă ceea ce se întâmplă atunci când există o creștere bruscă a numărului mediu de utilizatori sau vizitatori sau când există un atac DDOS asupra sistemului dumneavoastră.

Testarea la înmuiere: Acest test este diferit de celelalte de mai sus. Îți pune sistemul sub 80% (sau aproximativ) din sarcina normală și îl lasă să funcționeze pentru o perioadă lungă, să zicem 12 până la 14 ore. Acest tip de test determină cât de fiabil este un sistem în timp.

Încărcați Testarea API-urilor dvs. cu Locust

Dezvoltatorii au acces la o varietate de opțiuni pentru testarea încărcării API-urilor lor. Unele instrumente comune de testare a sarcinii sunt Gatling, JMeter și Locust. Ne vom concentra asupra Locust în acest articol.

Locust este un instrument de testare a încărcăturii bazat pe python, folosit de companii de top precum Google, Microsoft și Riot Games pentru a-și testa API-urile. În acest articol, vom demonstra cum să testați încărcarea unui API. 

Pentru acest tutorial, voi crea un API simplu cu Flask. Puteți să vă urmăriți împreună cu mine sau să vă creați API-ul cu Node sau orice cadru cu care vă simțiți confortabil.

Cerinţe

Python 3

Configurare și instalare

În primul rând, trebuie să configurați un mediu virtual pe computer, astfel încât să nu vă stricați mediul global Python. Pentru a face acest lucru, executați următoarele comenzi. Rețineți că aceste comenzi se aplică unui terminal Windows.

$ proiect mkdir

$ cd /d cale\la\proiect

$ python -m venv venv

$ venv\Scripts\activate

 

În primul rând, am creat un proiect director. Apoi ne-am schimbat directorul actual în proiect. Apoi am creat și activat un mediu virtual pentru Python în acel director. 

Acum, vom trece la instalare Flask(o vom folosi pentru a crea punctele finale care urmează să fie testate la încărcare) și roșcov însăși. 

 

Pentru a instala Flask, rulați. Asigurați-vă că sunteți în proiect unde ai creat un mediu virtual.

$ pip install flacon

 

Pentru a instala Locust, rulați

$ pip install locust

 

După ce ați făcut acest lucru, introduceți următoarele comenzi. Asigurați-vă că sunteți în dvs proiect director atunci când faci asta.

$ copy nul __init__.py

aplicația $ mkdir

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Această comandă creează câteva fișiere pe care le vom folosi pentru a ne crea punctele finale folosind Flask. De asemenea, puteți crea aceste fișiere folosind exploratorul de fișiere. Dar care este distracția în asta? După ce ați făcut asta, copiați codul de mai jos în app.py

din flask import Flask, jsonify, cerere

app = Flask (__ nume__)

modele_mașini = [

  { „brand”: „Tesla”, „model”: „Model S” }

]

 

plane_models = [

  { „brand”: „Boeing”, „model”: „747” }

]

 

@app.route('/mașini')

def get_cars():

  returnează jsonify(modele_mașinii)

@app.route('/planes')

def get_planes():

  returnează jsonify(plane_models)

dacă __name__ == '__main__':

    app.run(debug=True)  

 

Codul de mai sus conține o metodă obţine_maşini folosit pentru a obține o listă cu mărcile de mașini și modelele acestora și get_planes folosit pentru a obține o listă cu mărcile de avioane și modelele acestora. Pentru ca noi să testăm acest punct final, trebuie să rulăm app.py. Pentru a face asta, rulați comanda de mai jos.

$ calea python\la\app.py

Odată ce rulați asta, ar trebui să vedeți ceva de genul acesta:

Testarea încărcării API 1

Dacă copiați URL-ul de pe terminal și tastați masini or avioane după /, ar trebui să puteți vedea datele acolo. Totuși, scopul nostru este să testăm punctul final cu locust, nu cu browserul. Deci hai să facem asta. Rulați următoarea comandă în rădăcina dvs proiect director.

 

$ copie nul locust_test.py

 

Acest lucru creează un fișier „locust_test.py” în rădăcina fișierului dvs proiect director. După ce ați făcut asta, deschideți fișierul și inserați codul de mai jos. Îl vom explica în scurt timp.

 

timp de import

de la import de lăcuste HttpUser, sarcină, între

 

clasa UserBehaviour(HttpUser):

    timp_așteptare = între(5, 10)

 

    @sarcină

    def get_cars(self):

        self.client.get('/mașini')

    

    @sarcină

    def get_planes(self):

        self.client.get('/planes')

 

Acesta este un exemplu de bază de utilizare a Locust pentru a testa încărcarea unui API. În primul rând, creăm o clasă Comportamentul utilizatorului, care poate primi orice nume adecvat, dar trebuie extins HttpUser. HttpUser este clasa care se ocupă de instanțierea mai multor utilizatori virtuali pentru a îndeplini sarcinile pe care le specificăm în Comportamentul utilizatorului clasă. 

O sarcină este specificată prin decorarea unei metode cu @sarcină decorator. Avem și o funcție numită între() care ne permite să specificăm un interval de secunde de așteptat înainte de a executa următoarea sarcină. Puteți vedea că am alocat un interval de la 5 la 10 secunde pentru asta în codul nostru. 

Pentru a rula codul, asigurați-vă că vă aflați încă în mediul virtual. Dacă cel pe care l-ați creat este folosit de serverul care servește API-ul, deschideți un nou terminal, schimbați-vă directorul în proiect director și activați mediul virtual pe care l-ați creat. Puteți găsi comanda pentru activarea unui mediu virtual mai sus. Acum, introduceți comanda de mai jos în terminalul dvs.

 

$ lăcustă -f lăcustă_test.py

 

Ar trebui să vedeți așa ceva:

Testarea încărcării API 2

În mod implicit, interfața web a locust este localizată la http://localhost/8089. Dacă vizitați site-ul web, ar trebui să vedeți o interfață ca aceasta:

Testarea încărcării API 3

Din interfață, putem specifica numărul de utilizatori, rata de spawn (utilizatori creați pe secundă) și gazdă. Puteți obține adresa gazdei dvs. verificând terminalul pe care rulează serverul. În cazul nostru, este la portul 5000. Când faceți clic pe Începe să roiască, vi se va prezenta mai jos interfața.

Testarea încărcării API 4

Aceasta vă arată diverse valori utile, cum ar fi numărul de solicitări nereușite, timpul mediu pentru o solicitare, timpul minim pentru o solicitare, solicitările pe secundă și așa mai departe. Odată ce sunteți mulțumit de ceea ce vedeți, puteți face clic pe butonul de oprire. 


În afară de Statistici filă, există o Grafice filă care arată mai multe informații sub forma unui grafic, ca în imaginea de mai jos.

Există o graficul total de solicitări pe secundă, graficul timpului de răspuns, și graficul numărului de utilizatori, toate complotate împotriva timpului. Folosind graficele, puteți determina câți utilizatori sunt acceptabili pentru un timp de răspuns fix sau vă puteți observa diagramele pentru un timp de răspuns constant, în ciuda unui număr tot mai mare de utilizatori și alte perspective de acest fel. Dacă doriți să împărtășiți acestea Statistici cu altcineva, puteți descărca un raport de la Descărcați datele tab.

A concluziona...

Testarea API-ului dvs. de încărcare este o activitate crucială în procesul dvs. de dezvoltare, așa că asigurați-vă că este încorporată în ciclul dvs. de proiectare. Apropo, puteți efectua și alte tipuri de teste de încărcare variind valorile pentru numărul de utilizatori și rata de apariție. 

Dacă doriți să faceți un test de vârf, specificați o valoare mare (să zicem 2000) pentru numărul de utilizatori și apoi o valoare la fel de mare pentru rata de apariție (500 de exemplu). Aceasta înseamnă că, în 4 secunde, veți avea toți cei 2000 de utilizatori creați și vă vor accesa punctele finale. Un test de stres va fi similar, dar cu o valoare mult mai mică pentru rata de icre. Pentru a afla tot ce poți face, verifică Locust documentaţie