API testiranje opterećenja uz Locust

API testiranje opterećenja uz Locust

API testiranje opterećenja sa Locust: Uvod

Vjerojatno ste već bili u ovoj situaciji: pišete kod koji nešto radi, krajnju točku na primjer. Svoju krajnju točku testirate pomoću programa Postman ili Insomnia i sve radi dobro. Krajnju toč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 skupu situaciju za tvrtku. Zbog toga programeri softvera provode razne testove na softverskim sustavima kako bi osigurali da rade prema očekivanjima. API-ji se ne razlikuju. Prije implementacije trebali biste napraviti barem testove performansi i sigurnosne testove.

Testovi izvedbe mogu se grupirati u testove funkcionalnosti i testove opterećenja. Testovi funkcionalnosti ono su za što obično koristite Postman ili Insomniu. Oni osiguravaju da vaš API funkcionira onako kako očekujete. Testovi opterećenja, s druge strane, više se bave time kako vaš API radi s korištenjem u stvarnom svijetu i vršnim opterećenjem, a o tome govori ovaj članak. Pogledajmo detaljnije testove opterećenja.

Što 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 točkama. Ova vrsta testiranja omogućuje programerima da procijene izvedbu API-ja u stvarnom svijetu prije nego što se implementira. Pomaže im identificirati maksimalni radni kapacitet sustava, uska grla ako ih ima i smanjenje performansi. Testovi opterećenja API-ja obično se izvode stvaranjem virtualnih korisnika i njihovim korištenjem za istovremeno testiranje funkcionalnosti API-ja. 

Testovi opterećenja API-ja mjere metrike kao što su vrijeme odziva, istodobni korisnici, stope propusnosti, razine iskorištenosti resursa, srednje vrijeme između kvarova (MTBF), srednje vrijeme do kvara (MTTF) i tako dalje. Sve ove metrike mogu se koristiti za određivanje uspješnosti API-ja.

Vrste ispitivanja opterećenja

Postoji nekoliko vrsta testiranja opterećenja, od kojih svaka ima svoje slučajeve upotrebe. Pogledajmo neke od njih.

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

Testiranje otpornosti na stres: Ovo se koristi za procjenu performansi sustava pod vrlo velikim opterećenjem. Cilj ovog testa je vidjeti hoće li se sustav oporaviti nakon kvara i koliko je vremena potrebno za to. Opterećenje se obično polako povećava dok ne premaši mogućnosti sustava.

Ispitivanje šiljaka: Ovo je pomalo slično testiranju otpornosti na stres, osim što se veliko opterećenje primjenjuje iznenada, za razliku od polaganog povećanja. Ova vrsta testa predstavlja što se događa kada dođe do iznenadnog porasta vašeg prosječnog broja korisnika ili posjetitelja ili kada dođe do DDOS napada na vaš sustav.

Ispitivanje namakanjem: Ovaj test se razlikuje od ostalih gore navedenih. Stavlja vaš sustav pod 80% (ili otprilike) normalnog opterećenja i ostavlja ga da radi dulje vrijeme, recimo 12 do 14 sati. Ova vrsta testa određuje koliko je sustav pouzdan tijekom vremena.

Učitajte testiranje vaših API-ja pomoću Locusta

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 ćemo se članku usredotočiti na Locust.

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

Za ovaj vodič, kreirat ću jednostavan API s Flaskom. Možete me pratiti ili samo izraditi svoj API s Nodeom ili bilo kojim okvirom koji vam odgovara.

Zahtjevi

Python 3

Postavljanje i instalacija

Prvo morate postaviti virtualno okruženje na svom PC-u kako ne biste zabrljali u svom globalnom Python okruženju. Da biste to učinili, pokrenite sljedeće naredbe. Imajte na umu da se ove naredbe odnose na Windows terminal.

$ mkdir projekt

$ cd /d put\do\projekta

$ python -m venv venv

$ venv\Skripte\aktivirati

 

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

Sada ćemo prijeći na instalaciju Boca(koristit ćemo ga za izradu krajnjih točaka za testiranje opterećenja) i Skakavac sebe. 

 

Da biste instalirali Flask, pokrenite. Provjerite jeste li u projekt gdje ste stvorili virtualno okruženje.

$ pip instalacijska tikvica

 

Da biste instalirali Locust, pokrenite

$ pip instalirati skakavac

 

Kada to učinite, upišite sljedeće naredbe. Provjerite jeste li u svom projekt imenik kada to učinite.

$ kopija nul __init__.py

$ mkdir aplikacija

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Ove naredbe stvaraju neke datoteke koje ćemo koristiti za stvaranje naših krajnjih točaka pomoću Flaska. Usput, te datoteke možete izraditi i pomoću preglednika datoteka. Ali što je u tome zabavno? Nakon što to učinite, kopirajte donji kod u app.py

from flask import Flask, jsonify, request

app = Flask(__name__)

modeli_automobila = [

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

]

 

modeli_ravni = [

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

]

 

@app.route('/automobili')

def get_cars():

  return jsonify(car_models)

@app.route('/planes')

def get_planes():

  return jsonify(plane_models)

ako __name__ == '__main__':

    app.run(debug=True)  

 

Gornji kod sadrži metodu dobiti_automobile koristi se za dobivanje popisa marki automobila i njihovih modela, i get_planes koristi se za dobivanje popisa marki aviona i njihovih modela. Da bismo mogli učitati testiranje ove krajnje točke, moramo pokrenuti app.py. Da biste to učinili, pokrenite naredbu u nastavku.

$ python put\do\app.py

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

API testiranje opterećenja 1

Ako kopirate URL s terminala i upišete automobili or zrakoplovi nakon /, tamo biste trebali moći vidjeti podatke. Međutim, naš je cilj testirati krajnju točku s locustom, a ne s preglednikom. Pa učinimo to. Pokrenite sljedeću naredbu u korijenu vašeg projekt katalog.

 

$ copy nul locust_test.py

 

Ovo stvara datoteku 'locust_test.py' u korijenu vašeg projekt imenik. Nakon što to učinite, otvorite datoteku i zalijepite donji kod. Ubrzo ćemo to objasniti.

 

vrijeme uvoza

from locust import HttpUser, task, between

 

klasa UserBehaviour(HttpUser):

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

 

    @zadatak

    def get_cars(self):

        self.client.get('/automobili')

    

    @zadatak

    def get_planes(self):

        self.client.get('/planes')

 

Ovo je osnovni primjer korištenja Locusta za učitavanje testiranja API-ja. Prvo, kreiramo klasu Ponašanje korisnika, kojem se može dati bilo koji odgovarajući naziv, ali se mora proširiti HttpUser. HttpUser je klasa koja se brine za instanciranje više virtualnih korisnika za izvršavanje zadataka koje specificiramo u Ponašanje korisnika klase. 

Zadatak je specificiran ukrašavanjem metode s @zadatak dekorater. Imamo i funkciju tzv između() koji nam omogućuje da odredimo raspon sekundi za čekanje prije izvršavanja sljedećeg zadatka. Možete vidjeti da smo u našem kodu za to dodijelili raspon od 5 do 10 sekundi. 

Da biste pokrenuli kod, provjerite jeste li još uvijek u svom virtualnom okruženju. Ako onaj koji ste izradili koristi poslužitelj koji poslužuje API, otvorite novi terminal, promijenite svoj direktorij u svoj projekt imenik i aktivirajte virtualno okruženje koje ste stvorili. Gore možete pronaći naredbu za aktiviranje virtualnog okruženja. Sada unesite donju naredbu u svoj terminal.

 

$ skakavac -f skakavac_test.py

 

Trebali biste vidjeti nešto poput ovoga:

API testiranje opterećenja 2

Prema zadanim postavkama, locustovo web sučelje nalazi se na http://localhost/8089. Ako posjetite web stranicu, trebali biste vidjeti ovakvo sučelje:

API testiranje opterećenja 3

Iz sučelja možemo odrediti broj korisnika, stopu pokretanja (korisnici stvoreni u sekundi) i domaćina. Adresu svog hosta možete dobiti provjerom terminala na kojem je poslužitelj pokrenut. U našem slučaju to je na portu 5000. Kada kliknete na Počnite se rojiti, bit će vam predstavljeno sučelje u nastavku.

API testiranje opterećenja 4

Ovo vam pokazuje razne korisne metrike kao što su broj neuspjelih zahtjeva, prosječno vrijeme za zahtjev, minimalno vrijeme za zahtjev, zahtjevi po sekundi, i tako dalje. Nakon što ste zadovoljni onim što vidite, možete kliknuti na gumb za zaustavljanje. 


Osim Statistika kartica, postoji Karte karticu koja prikazuje više informacije u obliku grafikona, kao na slici ispod.

Tamo je grafikon ukupnih zahtjeva po sekundi, grafikon vremena odziva, i grafikon broja korisnika, sve iscrtano protiv vremena. Pomoću grafikona možete odrediti koliko je korisnika prihvatljivo za fiksno vrijeme odgovora ili možete promatrati svoje grafikone za konstantno vrijeme odgovora unatoč sve većem broju korisnika i slične uvide. Ako želite podijeliti ove statistike s nekim drugim, možete preuzeti izvješće s Preuzimanje podataka Tab.

Zaključiti...

Testiranje opterećenja vašeg API-ja ključna je aktivnost u vašem razvojnom procesu, stoga provjerite je li uključeno u vaš ciklus dizajna. Usput, također možete provesti druge vrste testova opterećenja mijenjanjem vrijednosti za broj korisnika i stopu pokretanja. 

Ako želite napraviti spike test, odredite veliku vrijednost (recimo 2000) za broj korisnika, a zatim jednako veliku vrijednost za vašu stopu pojavljivanja (500 na primjer). To znači da biste za 4 sekunde stvorili svih 2000 korisnika koji bi pristupali vašim krajnjim točkama. Test otpornosti na stres bit će sličan, ali s puno nižom vrijednošću za stopu mriještenja. Kako biste saznali što sve možete učiniti, pogledajte Locust dokumentacija