Testiranje opterećenja API-ja sa Locustom

Testiranje opterećenja API-ja sa Locustom

Testiranje opterećenja API-ja sa Locustom: Uvod

Vjerovatno ste već bili u ovoj situaciji: pišete kod koji nešto radi, na primjer krajnju tačku. Testirate svoju krajnju tačku koristeći Postman ili Insomnia i sve radi dobro. Krajnju tačku prosljeđujete programeru na strani klijenta, koji zatim koristi API i implementira aplikaciju. Ali tada, API ne uspijeva kada korisnici koriste aplikaciju.

Ovo može biti jako neugodna situacija, a da ne spominjemo skupo za posao. Zbog toga programeri softvera provode razne testove na softverskim sistemima kako bi bili sigurni da rade kako se očekuje. API-ji se ne razlikuju. Prije implementacije, trebali biste napraviti barem testove performansi i sigurnosne testove.

Testovi performansi se mogu grupirati u testove funkcionalnosti i testove opterećenja. Testovi funkcionalnosti su ono za što obično koristite Postman ili Insomnia. Oni osiguravaju da vaš API funkcionira kako očekujete. Testovi opterećenja se, s druge strane, više bave načinom na koji vaš API radi sa stvarnom upotrebom i vršnim opterećenjem, i o tome je ovaj članak. Pogledajmo detaljnije testove opterećenja.

Šta je API testiranje opterećenja?

API testiranje opterećenja je vrsta testiranja koju programeri koriste za simulaciju normalnog i vršnog opterećenja na krajnjim tačkama. Ova vrsta testiranja omogućava programerima da procijene stvarne performanse API-ja prije nego što se implementiraju. Pomaže im da identifikuju maksimalni operativni kapacitet sistema, uska grla, ako ih ima, i degradaciju performansi. Testovi opterećenja API-ja se obično rade kreiranjem virtuelnih korisnika, a zatim ih koriste za istovremeno testiranje funkcionalnosti API-ja. 

API testovi opterećenja mjere metriku poput vremena odgovora, istovremenih korisnika, brzine protoka, nivoa iskorištenosti resursa, srednjeg vremena između neuspjeha (MTBF), srednjeg vremena do neuspjeha (MTTF) i tako dalje. Sve ove metrike se mogu koristiti za određivanje koliko dobro radi API.

Vrste testiranja opterećenja

Postoji nekoliko tipova testiranja opterećenja, svaki sa svojim slučajevima upotrebe. Pogledajmo neke od njih.

Testiranje opterećenja: Ovo je osnovni oblik testa opterećenja. Koristi se za procjenu performansi sistema (u ovom slučaju API-ja) pod normalnim opterećenjem i očekivanim vršnim opterećenjem.

Testiranje na stres: Ovo se koristi za procjenu performansi sistema pod vrlo velikim opterećenjem. Cilj ovog testa je da se vidi da li se sistem oporavlja nakon kvara i koliko je vremena potrebno da se to uradi. Opterećenje se obično polako povećava sve dok ne premaši mogućnosti sistema.

Spike testiranje: Ovo je malo slično testiranju na stres, osim što se veliko opterećenje primjenjuje iznenada, umjesto da se polako povećava. Ova vrsta testa predstavlja šta se dešava kada dođe do iznenadnog porasta vašeg prosečnog broja korisnika ili posetilaca, ili kada dođe do DDOS napada na vaš sistem.

Testiranje namakanja: Ovaj test se razlikuje od ostalih gore navedenih. To stavlja vaš sistem ispod 80% (ili otprilike) normalnog opterećenja i ostavlja ga da radi na duži period, recimo 12 do 14 sati. Ova vrsta testa određuje koliko je sistem pouzdan tokom vremena.

Testiranje opterećenja vaših API-ja sa Locustom

Programeri imaju pristup raznim opcijama za testiranje opterećenja svojih API-ja. Neki uobičajeni alati za testiranje opterećenja su Gatling, JMeter i Locust. U ovom članku ćemo se fokusirati na skakavca.

Locust je alat za testiranje opterećenja otvorenog koda baziran na pythonu koji koriste vrhunske kompanije kao što su Google, Microsoft i Riot Games za testiranje svojih API-ja. U ovom članku ćemo pokazati kako učitati test API. 

Za ovaj tutorijal, kreiraću jednostavan API sa Flaskom. Možete me pratiti ili jednostavno kreirati svoj API sa Nodeom, ili bilo kojim drugim okvirom koji vam odgovara.

zahtjevi

Python 3

Postavljanje i instalacija

Prvo, morate podesiti virtuelno okruženje na svom računaru kako ne biste upropastili svoje globalno Python okruženje. Da biste to učinili, pokrenite sljedeće naredbe. Imajte na umu da se ove naredbe odnose na Windows terminal.

$ mkdir projekat

$ cd /d putanja\do\projekta

$ python -m venv venv

$ venv\Scripts\aktivirati

 

Prvo smo kreirali a projekt imenik. Zatim smo promijenili naš trenutni direktorij u projekt. Zatim smo kreirali i aktivirali virtualno okruženje za Python unutar tog direktorija. 

Sada ćemo preći na instalaciju boca(koristit ćemo ga za kreiranje krajnjih tačaka za testiranje opterećenja) i Locust sama. 

 

Da instalirate Flask, pokrenite. Budite sigurni da ste u projekt gdje ste kreirali virtuelno okruženje.

$ pip install flask

 

Da instalirate Locust, pokrenite

$ pip install locust

 

Kada to učinite, otkucajte sljedeće komande. Provjerite jeste li u svom projekt direktorij kada to učinite.

$ copy nul __init__.py

$ mkdir aplikacija

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Ova naredba kreira neke datoteke koje ćemo koristiti za kreiranje naših krajnjih tačaka koristeći Flask. Usput, također možete kreirati ove datoteke koristeći svoj file explorer. Ali šta je u tome zabavno? Kada to učinite, kopirajte kod ispod app.py

iz flask import Flask, jsonify, zahtjev

app = Flask(__name__)

car_models = [

  { 'brand': 'Tesla', 'model': 'Model S' }

]

 

avionski modeli = [

  { 'brand': 'Boeing', 'model': '747' }

]

 

@app.route('/automobili')

def get_cars():

  vrati jsonify(car_models)

@app.route('/planes')

def get_planes():

  vrati jsonify(modeli aviona)

ako __name__ == '__main__':

    app.run(debug=Tačno)  

 

Gornji kod sadrži metodu get_cars koristi se za dobijanje liste marki automobila i njihovih modela, i get_planes koristi se za dobijanje liste marki aviona i njihovih modela. Da bismo testirali ovu krajnju tačku, moramo pokrenuti app.py. Da biste to uradili, pokrenite naredbu ispod.

$ python put\do\app.py

Kada to pokrenete, trebali biste vidjeti nešto poput ovoga:

Testiranje opterećenja API-ja 1

Ako kopirate URL sa terminala i ukucate automobili or aviona nakon /, trebali biste moći vidjeti podatke tamo. Međutim, naš cilj je da testiramo krajnju tačku sa locustom, a ne sa pretraživačem. Pa hajde da uradimo to. Pokrenite sljedeću naredbu u korijenu vašeg projekt direktorij.

 

$ copy nul locust_test.py

 

Ovo kreira datoteku 'locust_test.py' u korijenu vašeg projekt imenik. Kada to učinite, otvorite datoteku i zalijepite kod ispod. Uskoro ćemo to objasniti.

 

vrijeme uvoza

from locust import HttpUser, zadatak, između

 

klasa UserBehaviour(HttpUser):

    vrijeme_čekanja = između (5, 10)

 

    @task

    def get_cars(self):

        self.client.get('/automobili')

    

    @task

    def get_planes(self):

        self.client.get('/planes')

 

Ovo je osnovni primjer korištenja Locusta za testiranje učitavanja API-ja. Prvo kreiramo klasu UserBehaviour, kojem se može dati bilo koje odgovarajuće ime, ali se mora proširiti HttpUser. HttpUser je klasa koja se brine o instanciranju više virtuelnih korisnika za izvršavanje zadataka koje specificiramo u UserBehaviour klase. 

Zadatak se specificira ukrašavanjem metode sa @task dekorater. Imamo i funkciju pod nazivom između() što nam omogućava da odredimo raspon sekundi za čekanje prije izvršavanja sljedećeg zadatka. Možete vidjeti da smo za to u našem kodu dodijelili raspon od 5 do 10 sekundi. 

Da biste pokrenuli kod, provjerite jeste li još uvijek u svom virtuelnom okruženju. Ako server koji opslužuje API koristi onaj koji ste kreirali, otvorite novi terminal, promijenite svoj direktorij u svoj projekt direktorij i aktivirajte virtualno okruženje koje ste kreirali. Naredbu za aktiviranje virtuelnog okruženja možete pronaći iznad. Sada unesite naredbu ispod u svoj terminal.

 

$ locust -f locust_test.py

 

Trebali biste vidjeti nešto poput ovoga:

Testiranje opterećenja API-ja 2

Podrazumevano, web interfejs skakavca se nalazi na http://localhost/8089. Ako posjetite web stranicu, trebali biste vidjeti sučelje poput ovog:

Testiranje opterećenja API-ja 3

Iz interfejsa možemo odrediti broj korisnika, brzinu pojavljivanja (korisnici kreirani u sekundi) i host. Možete dobiti adresu svog hosta tako što ćete provjeriti terminal na kojem server radi. U našem slučaju je na portu 5000. Kada kliknete na Počni da se rojiš, biće vam predstavljen interfejs ispod.

Testiranje opterećenja API-ja 4

Ovo vam pokazuje razne korisne metrike kao što su broj neuspjelih zahtjeva, prosječno vrijeme za zahtjev, minimalno vrijeme za zahtjev, zahtjevi u sekundi, itd. Kada budete zadovoljni onim što vidite, možete kliknuti na dugme za zaustavljanje. 


Osim statistika tab, postoji a Charts kartica koja prikazuje više informacija u obliku grafikona, kao na slici ispod.

Postoji ukupan broj zahtjeva po sekundi graf, grafik vremena odziva, i graf broja korisnika, sve zacrtano protiv vremena. Koristeći grafikone, možete odrediti koliko korisnika je prihvatljivo za fiksno vrijeme odgovora, ili možete promatrati svoje grafikone za konstantno vrijeme odgovora unatoč sve većem broju korisnika i drugim sličnim uvidima. Ako želite podijeliti ovo stats sa nekim drugim, možete preuzeti izvještaj sa Preuzimanje podataka tab.

Zaključiti...

Testiranje opterećenja vašeg API-ja je ključna aktivnost u vašem procesu razvoja, pa se pobrinite da je uključeno u vaš ciklus dizajna. Usput, možete izvršiti i druge tipove testova opterećenja mijenjajući vrijednosti za broj korisnika i stopu pojavljivanja. 

Ako želite da napravite spike test, navedite veliku vrijednost (recimo 2000) za broj korisnika, a zatim jednako veliku vrijednost za vašu stopu pojavljivanja (500 na primjer). To znači da ćete za 4 sekunde imati svih 2000 korisnika kreiranih i pristupiti vašim krajnjim tačkama. Stres test će biti sličan, ali s mnogo nižom vrijednošću za stopu mrijesta. Kako biste saznali sve što možete učiniti, pogledajte Locust dokumentacija