API apkrovos bandymas naudojant Locust

API apkrovos bandymas naudojant Locust

API apkrovos bandymas su Locust: įvadas

Tikriausiai jau buvote tokioje situacijoje: rašote kodą, kuris kažką daro, pavyzdžiui, galinį tašką. Jūs patikrinate savo galutinį tašką naudodami „Postman“ arba „Insomnia“ ir viskas veikia gerai. Jūs perduodate galutinį tašką kliento pusės kūrėjui, kuris tada naudoja API ir diegia programą. Bet tada API sugenda, kai vartotojai naudojasi programa.

Tai gali būti labai erzinanti situacija, jau nekalbant apie tai, kad tai brangiai kainuoja verslui. Štai kodėl programinės įrangos kūrėjai atlieka įvairius programinės įrangos sistemų testus, kad įsitikintų, jog jos veikia taip, kaip tikėtasi. API nesiskiria. Prieš diegdami turėtumėte atlikti bent jau našumo ir saugos testus.

Veikimo testai gali būti suskirstyti į funkcionalumo testus ir apkrovos testus. Funkcionalumo testai dažniausiai naudojami „Postman“ arba „Insomnia“. Jie užtikrina, kad jūsų API veiktų taip, kaip tikitės. Kita vertus, apkrovos testai yra labiau susiję su jūsų API veikimu naudojant realų pasaulį ir didžiausią apkrovą, ir apie tai yra šiame straipsnyje. Pažvelkime į apkrovos testus išsamiau.

Kas yra API apkrovos testavimas?

API apkrovos testavimas yra testavimo tipas, kurį kūrėjai naudoja norėdami imituoti įprastą ir didžiausią galinių taškų apkrovą. Tokio tipo testavimas leidžia kūrėjams įvertinti realų API našumą prieš ją įdiegiant. Tai padeda jiems nustatyti maksimalų sistemos veikimo pajėgumą, kliūtis, jei tokių yra, ir veikimo pablogėjimą. API apkrovos testai paprastai atliekami sukuriant virtualius vartotojus ir naudojant juos API funkcionalumui išbandyti vienu metu. 

API apkrovos testai matuoja tokią metriką kaip atsako laikas, vienu metu esantys vartotojai, pralaidumas, išteklių panaudojimo lygiai, vidutinis laikas tarp gedimų (MTBF), vidutinis laikas iki gedimo (MTTF) ir pan. Visos šios metrikos gali būti naudojamos norint nustatyti, kaip gerai veikia API.

Apkrovos testavimo tipai

Yra keletas apkrovos testavimo tipų, kurių kiekvienas turi savo naudojimo atvejus. Pažvelkime į kai kuriuos iš jų.

Apkrovos bandymas: Tai yra pagrindinė apkrovos testo forma. Jis naudojamas įvertinti sistemos (šiuo atveju API) veikimą esant normaliai apkrovai ir numatomai didžiausiai apkrovai.

Testavimas nepalankiausiu būdu: Tai naudojama sistemos veikimui įvertinti esant labai didelei apkrovai. Šio testo tikslas – išsiaiškinti, ar sistema atsigauna po gedimo ir kiek laiko tai užtrunka. Apkrova paprastai didinama lėtai, kol ji viršija sistemos galimybes.

Spike testavimas: Tai šiek tiek panašu į testavimą nepalankiausiomis sąlygomis, išskyrus tuos atvejus, kai staigiai veikiama didelė apkrova, o ne lėtai. Šio tipo testas parodo, kas nutinka, kai staiga padidėja vidutinis vartotojų ar lankytojų skaičius arba kai jūsų sistemoje įvyksta DDOS ataka.

Mirkymo bandymas: Šis testas skiriasi nuo kitų aukščiau pateiktų. Tai sumažina jūsų sistemos įprastą apkrovą iki 80 % (ar maždaug) ir palieka ją veikti ilgą laiką, tarkime, 12–14 valandų. Šio tipo testas nustato sistemos patikimumą laikui bėgant.

Įkelkite savo API testavimą naudodami „Locust“.

Kūrėjai turi prieigą prie įvairių savo API apkrovos testavimo parinkčių. Kai kurie įprasti apkrovos testavimo įrankiai yra „Gatling“, „JMeter“ ir „Locust“. Šiame straipsnyje daugiausia dėmesio skirsime Locust.

Locust yra python pagrįstas atvirojo kodo apkrovos testavimo įrankis, kurį naudoja geriausios įmonės, tokios kaip Google, Microsoft ir Riot Games, norėdami išbandyti savo API. Šiame straipsnyje parodysime, kaip įkelti bandomąją API. 

Šiam mokymui sukursiu paprastą API su „Flask“. Galite sekti kartu su manimi arba tiesiog sukurti savo API naudodami „Node“ arba bet kokią jums patogią sistemą.

reikalavimai

python 3

Sąranka ir diegimas

Pirmiausia turite savo kompiuteryje nustatyti virtualią aplinką, kad nesugadintumėte pasaulinės Python aplinkos. Norėdami tai padaryti, paleiskite šias komandas. Atminkite, kad šios komandos taikomos „Windows“ terminalui.

$ mkdir projektas

$ cd / d kelias\į\projektą

$ python -m venv venv

$ venv\Scripts\activate

 

Pirmiausia sukūrėme a projektas katalogas. Tada pakeitėme dabartinį katalogą į projektas. Tada tame kataloge sukūrėme ir suaktyvinome virtualią Python aplinką. 

Dabar pereisime prie diegimo Kolba(naudosime jį kurdami galutinius taškus, kurie bus tikrinami apkrova) ir skėrys Pati. 

 

Norėdami įdiegti „Flask“, paleiskite. Įsitikinkite, kad esate projektas kur sukūrėte virtualią aplinką.

$ pip diegimo kolba

 

Norėdami įdiegti Locust, paleiskite

$ pip įdiegti skėrius

 

Kai tai padarysite, įveskite šias komandas. Įsitikinkite, kad esate savo projektas kataloge, kai tai padarysite.

$ kopija nul __init__.py

$ mkdir programa

$ nukopijuokite nul app\app.py

$ kopija nul app\__init__.py

 

Šios komandos sukuria kai kuriuos failus, kuriuos naudosime kurdami galutinius taškus naudodami „Flask“. Beje, šiuos failus taip pat galite sukurti naudodami failų naršyklę. Bet kas tame smagu? Kai tai padarysite, nukopijuokite toliau esantį kodą į app.py

iš kolbos importas Kolba, jsonify, prašymas

programa = Kolba (__name__)

car_models = [

  { 'prekės ženklas': 'Tesla', 'modelis': 'Model S' }

]

 

plane_models = [

  { 'prekės ženklas': 'Boeing', 'modelis': '747' }

]

 

@app.route('/cars')

def get_cars ():

  return jsonify(car_models)

@app.route('/planes')

def get_planes ():

  return jsonify(plane_models)

if __name__ == '__main__':

    app.run(debug=True)  

 

Aukščiau pateiktame kode yra metodas gauti_automobilius naudojamas norint gauti automobilių markių ir jų modelių sąrašą, ir get_planes naudojamas lėktuvų markių ir jų modelių sąrašui gauti. Kad galėtume įkelti šį galinį tašką, turime paleisti app.py. Norėdami tai padaryti, paleiskite žemiau esančią komandą.

$ python kelias\to\app.py

Kai tai paleisite, turėtumėte pamatyti kažką panašaus:

API apkrovos bandymas 1

Jei nukopijuosite URL iš terminalo ir įveskite automobiliai or lėktuvai po /, turėtumėte matyti ten esančius duomenis. Tačiau mūsų tikslas yra išbandyti galinį tašką su skėriu, o ne su naršykle. Taigi padarykime tai. Paleiskite šią komandą savo šaknyje projektas katalogas.

 

$ kopija nul locust_test.py

 

Tai sukuria „locust_test.py“ failą jūsų šaknyje projektas katalogas. Kai tai padarysite, atidarykite failą ir įklijuokite toliau pateiktą kodą. Netrukus paaiškinsime.

 

importo laikas

iš skėrių importo HttpUser, užduotis, tarp

 

klasės vartotojo elgesys (HttpUser):

    laukimo_laikas = tarp(5, 10)

 

    @užduotis

    def get_cars (self):

        self.client.get('/cars')

    

    @užduotis

    def get_planes(self):

        self.client.get('/planes')

 

Tai yra pagrindinis pavyzdys, kaip naudoti „Locust“ API bandymui įkelti. Pirmiausia sukuriame klasę Vartotojo elgesys, kuriam gali būti suteiktas bet koks tinkamas pavadinimas, bet jis turi būti išplėstas HttpUser. HttpUser yra klasė, kuri rūpinasi kelių virtualių vartotojų paleidimu, kad jie atliktų užduotis, kurias nurodome Vartotojo elgesys klasė. 

Užduotis nurodoma dekoruojant metodą su @užduotis dekoratorius. Taip pat turime funkciją, vadinamą tarp () leidžia mums nurodyti sekundžių intervalą, kurio reikia laukti prieš atlikdami kitą užduotį. Matote, kad savo kode tam priskyrėme intervalą nuo 5 iki 10 sekundžių. 

Norėdami paleisti kodą, įsitikinkite, kad vis dar esate virtualioje aplinkoje. Jei tą, kurį sukūrėte, naudoja serveris, aptarnaujantis API, atidarykite naują terminalą, pakeiskite savo katalogą į projektas katalogą ir suaktyvinkite sukurtą virtualią aplinką. Virtualios aplinkos aktyvinimo komandą rasite aukščiau. Dabar savo terminale įveskite žemiau esančią komandą.

 

$ locust -f locust_test.py

 

Turėtumėte pamatyti kažką tokio:

API apkrovos bandymas 2

Pagal numatytuosius nustatymus skėrių žiniatinklio sąsaja yra adresu http://localhost/8089. Jei lankotės svetainėje, turėtumėte pamatyti tokią sąsają:

API apkrovos bandymas 3

Sąsajoje galime nurodyti vartotojų skaičių, atsiradimo greitį (per sekundę sukurtų vartotojų) ir pagrindinį kompiuterį. Savo pagrindinio kompiuterio adresą galite sužinoti patikrinę terminalą, kuriame veikia serveris. Mūsų atveju jis yra prie 5000 prievado. Kai paspausite Pradėkite spiečius, jums bus pateikta toliau pateikta sąsaja.

API apkrovos bandymas 4

Čia rodoma įvairi naudinga metrika, pvz., nepavykusių užklausų skaičius, vidutinis užklausos laikas, minimalus užklausos laikas, užklausos per sekundę ir pan. Kai būsite patenkinti tuo, ką matote, galite spustelėti sustabdymo mygtuką. 


Be to Statistika skirtuke, yra a Diagramos skirtuką, kuriame rodoma daugiau informacija grafiko pavidalu, kaip paveikslėlyje žemiau.

Čia yra visų užklausų per sekundę diagrama, atsako laiko grafikas, ir vartotojų skaičiaus grafiką, viskas suplanuota prieš laiką. Naudodami diagramas galite nustatyti, kiek vartotojų yra priimtini esant fiksuotam atsako laikui, arba galite stebėti savo diagramas, kad reakcijos laikas būtų pastovus, nepaisant didėjančio vartotojų skaičiaus, ir kitų panašių įžvalgų. Jei norite pasidalinti šiais statistika su kuo nors kitu, galite atsisiųsti ataskaitą iš Atsisiųskite duomenis skirtukas.

Pabaigai...

API apkrovos testavimas yra labai svarbi jūsų kūrimo proceso veikla, todėl įsitikinkite, kad jis įtrauktas į jūsų projektavimo ciklą. Beje, galite atlikti ir kitų tipų apkrovos testus, keisdami vartotojų skaičiaus ir iškreipimo greičio reikšmes. 

Jei norite atlikti smailės testą, nurodykite didelę vartotojų skaičiaus reikšmę (pvz., 2000), o tada tokią pat didelę reikšmę savo atsiradimo dažniui (pavyzdžiui, 500). Tai reiškia, kad per 4 sekundes visi 2000 vartotojų bus sukurti ir pasiekti jūsų galinius taškus. Testavimas nepalankiausiomis sąlygomis bus panašus, bet su daug mažesne neršto greičio verte. Norėdami sužinoti, ką galite padaryti, peržiūrėkite Locust dokumentacija