Ittestjar tat-Tagħbija tal-API Bil-Ħrub

Ittestjar tat-Tagħbija tal-API Bil-Ħrub

Ittestjar tat-Tagħbija API Bil-Ħrub: Intro

Probabilment kont f'din is-sitwazzjoni qabel: tikteb kodiċi li jagħmel xi ħaġa, endpoint per eżempju. Inti tittestja l-endpoint tiegħek billi tuża Postman jew Nuqqas ta 'rqad, u kollox jaħdem tajjeb. Int tgħaddi l-endpoint lill-iżviluppatur fuq in-naħa tal-klijent, li mbagħad jikkonsma l- API u tiskjera l-applikazzjoni. Iżda mbagħad, l-API tfalli meta l-utenti jużaw l-app.

Din tista 'tkun sitwazzjoni super tedjanti li tkun fiha, biex ma nsemmux għalja għal negozju. Huwa għalhekk li l-iżviluppaturi tas-softwer iwettqu varjetà ta 'testijiet fuq is-sistemi tas-softwer biex jiżguraw li jwettqu kif mistenni. L-APIs mhumiex differenti. Qabel l-iskjerament, għandek tagħmel mill-inqas testijiet tal-prestazzjoni u testijiet tas-sigurtà.

It-testijiet tal-prestazzjoni jistgħu jinġabru fi testijiet tal-funzjonalità u testijiet tat-tagħbija. It-testijiet tal-funzjonalità huma dak li normalment tuża Postman jew Nuqqas ta 'rqad. Huma jiżguraw li l-API tiegħek taħdem kif tistenna. It-testijiet tat-tagħbija, min-naħa l-oħra, huma aktar imħassba dwar kif l-API tiegħek twettaq bl-użu fid-dinja reali u l-ogħla tagħbija, u dan huwa dwar dan l-artikolu. Ejja nħarsu lejn it-testijiet tat-tagħbija f'aktar dettall.

X'inhu l-Ittestjar tat-Tagħbija API?

L-ittestjar tat-tagħbija tal-API huwa tip ta' ttestjar li l-iżviluppaturi jużaw biex jissimulaw it-tagħbija normali u l-ogħla fuq l-endpoints. Dan it-tip ta 'ttestjar jippermetti lill-iżviluppaturi jevalwaw il-prestazzjoni fid-dinja reali ta' API qabel ma tiġi skjerata. Jgħinhom jidentifikaw il-kapaċità operattiva massima ta 'sistema, konġestjonijiet jekk hemm, u degradazzjoni tal-prestazzjoni. It-testijiet tat-tagħbija tal-API normalment isiru billi jinħolqu utenti virtwali u mbagħad jintużaw biex jittestjaw il-funzjonalità tal-API fl-istess ħin. 

It-testijiet tat-tagħbija tal-API ikejlu l-metriċi bħall-ħin tar-rispons, l-utenti konkorrenti, ir-rati tal-produzzjoni, il-livelli tal-użu tar-riżorsi, il-Ħin Medju Bejn Ħsara (MTBF), il-Ħin Medju għal Nuqqas (MTTF), eċċ. Dawn il-metriċi kollha jistgħu jintużaw biex jiddeterminaw kemm sejjer tajjeb l-API.

Tipi ta 'Testjar ta' Tagħbija

Hemm diversi tipi ta 'ttestjar tat-tagħbija, kull wieħed bil-każijiet ta' użu tiegħu. Ejja nagħtu ħarsa lejn xi wħud minnhom.

Ittestjar tat-Tagħbija: Din hija l-forma bażika ta 'test tat-tagħbija. Huwa użat biex jevalwa l-prestazzjoni ta 'sistema (f'dan il-każ, API) taħt tagħbija normali u l-ogħla tagħbija mistennija.

Ittestjar tal-istress: Dan jintuża biex jevalwa l-prestazzjoni ta 'sistema taħt tagħbija tqila ħafna. L-għan ta 'dan it-test huwa li jara jekk sistema tirkuprax wara l-falliment, u kemm iddum biex tagħmel dan. It-tagħbija normalment tiżdied bil-mod sakemm taqbeż il-kapaċitajiet tas-sistema.

Spike Testing: Dan huwa xi ftit simili għall-ittestjar tal-istress, ħlief li t-tagħbija tqila tiġi applikata f'daqqa, għall-kuntrarju li tiżdied bil-mod. Dan it-tip ta 'test jirrappreżenta x'jiġri meta jkun hemm żieda f'daqqa fin-numru medju ta' utenti jew viżitaturi tiegħek, jew meta jkun hemm attakk DDOS fuq is-sistema tiegħek.

Ittestjar tas-Soak: Dan it-test huwa kuntrarju għall-oħrajn hawn fuq. Tpoġġi s-sistema tiegħek taħt 80% (jew madwar) tat-tagħbija normali u tħalliha taħdem għal perjodu twil, ngħidu aħna 12 sa 14-il siegħa. Dan it-tip ta' test jiddetermina kemm sistema tkun affidabbli maż-żmien.

Tagħbija Ittestja l-APIs Tiegħek Bil-Ħrub

L-iżviluppaturi għandhom aċċess għal varjetà ta 'għażliet għall-ittestjar tat-tagħbija tal-APIs tagħhom. Xi għodod komuni għall-ittestjar tat-tagħbija huma Gatling, JMeter, u Locust. Se nkunu qed niffukaw fuq il-Ħrub f'dan l-artikolu.

Locust hija għodda ta 'ttestjar tat-tagħbija ta' sors miftuħ ibbażat fuq python użata mill-aqwa kumpaniji bħal Google, Microsoft u Riot Games biex jittestjaw l-APIs tagħhom. F'dan l-artikolu, ser nuru kif tagħbija tittestja API. 

Għal dan it-tutorja, ser inkun noħloq API sempliċi b'Flask. Tista 'ssegwi miegħi jew sempliċement toħloq l-API tiegħek b'Node, jew kwalunkwe qafas li tkun komdu miegħu.

Rekwiżiti

python 3

Setup & Installazzjoni

L-ewwel, għandek bżonn twaqqaf ambjent virtwali fuq il-PC tiegħek sabiex ma tħawwadx l-ambjent Python globali tiegħek. Biex tagħmel dan, mexxi l-kmandi li ġejjin. Innota li dawn il-kmandi japplikaw għal terminal tal-Windows.

proġett $ mkdir

$ cd /d mogħdija\sa\proġett

$ python -m venv venv

$ venv\Scripts\attiva

 

L-ewwel, ħloqna a proġett direttorju. Imbagħad biddilna d-direttorju attwali tagħna għal proġett. Imbagħad ħloqna u attivajna ambjent virtwali għal Python ġewwa dak id-direttorju. 

Issa, se ngħaddu għall-installazzjoni Garafina(se nużawha biex noħolqu l-endpoints li għandhom jiġu ttestjati tat-tagħbija) u ħarrub innifsu. 

 

Biex tinstalla Flask, mexxi. Kun żgur li int fil- proġett fejn ħloqt ambjent virtwali.

$ pip install flask

 

Biex tinstalla l-Ħrub, mexxi

$ pip install locust

 

Ladarba dan isir, ittajpja l-kmandi li ġejjin. Kun żgur li int qiegħed tiegħek proġett direttorju meta tagħmel dan.

$ kopja nul __init__.py

$ mkdir app

$ kopja null app\app.py

$ kopja null app\__init__.py

 

Dan il-kmandi joħloq xi fajls li ser nużaw biex noħolqu l-endpoints tagħna bl-użu tal-Flask. Tista 'wkoll toħloq dawn il-fajls billi tuża l-esploratur tal-fajls tiegħek mill-mod. Imma x'inhu l-gost f'dan? Ladarba tkun għamilt dan, kopja l-kodiċi hawn taħt app.py

mill-importazzjoni flixkun Flixkun, jsonify, talba

app = Flixkun (__isem__)

car_models = [

  { 'marka': 'Tesla', 'mudell': 'Mudell S'}

]

 

plane_models = [

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

]

 

@app.route('/cars')

def get_cars():

  ritorn jsonify(car_models)

@app.route('/planes')

def get_planes():

  ritorn jsonify(mudelli_pjan)

jekk __name__ == '__main__':

    app.run(debug=Veru)  

 

Il-kodiċi ta 'hawn fuq fih metodu get_cars użati biex jiksbu lista ta 'marki tal-karozzi u l-mudelli tagħhom, u get_planes użati biex jiksbu lista ta 'marki ajruplani u l-mudelli tagħhom. Għalina biex nittestjaw dan l-endpoint, irridu nħaddmu app.py. Biex tagħmel dan mexxi l-kmand hawn taħt.

$ python path\sa\app.py

Ladarba tmexxi dak, għandek tara xi ħaġa bħal din:

Ittestjar tat-Tagħbija API 1

Jekk tikkopja l-URL mit-terminal u ttajpja karozzi or pjani wara l-/, għandek tkun tista' tara d-dejta hemmhekk. Madankollu, l-għan tagħna huwa li nittestjaw l-endpoint bil-ħarrub, mhux bil-browser. Mela ejja nagħmlu dan. Mexxi l-kmand li ġej fl-għerq tiegħek proġett direttorju.

 

$ kopja null locust_test.py

 

Dan joħloq fajl 'locust_test.py' fl-għerq ta' tiegħek proġett direttorju. Ladarba tkun għamilt dan, iftaħ il-fajl u waħħal fil-kodiċi hawn taħt. Aħna ser nispjegawh dalwaqt.

 

ħin ta 'importazzjoni

mill-importazzjoni tal-ħarrub HttpUser, kompitu, bejn

 

klassi UserBehaviour (HttpUser):

    wait_time = bejn (5, 10)

 

    @kompitu

    def get_cars(self):

        self.client.get('/cars')

    

    @kompitu

    def get_planes(self):

        self.client.get('/planes')

 

Dan huwa eżempju bażiku tal-użu tal-Locust biex jittestja API. L-ewwel, noħolqu klassi L-Imġieba tal-Utent, li jista' jingħata kwalunkwe isem xieraq iżda għandu jestendi HttpUser. HttpUser hija l-klassi li tieħu ħsieb li tisstanzja utenti virtwali multipli biex iwettqu l-kompiti li nispeċifikaw fil- L-Imġieba tal-Utent klassi. 

Kompitu huwa speċifikat billi dekorazzjoni metodu bil- @kompitu dekoratur. Għandna wkoll funzjoni msejħa bejn() li jippermettilna nispeċifikaw firxa ta’ sekondi biex nistennew qabel ma nwettqu l-kompitu li jmiss. Tista 'tara li aħna assenjati firxa ta' 5 sa 10 sekondi għal dak fil-kodiċi tagħna. 

Biex tħaddem il-kodiċi, kun żgur li għadek fl-ambjent virtwali tiegħek. Jekk dak li ħloqt qed jintuża mis-server li jservi l-API, iftaħ terminal ġdid, ibdel id-direttorju tiegħek għal tiegħek proġett direttorju, u attiva l-ambjent virtwali li ħloqt. Tista 'ssib il-kmand għall-attivazzjoni ta' ambjent virtwali hawn fuq. Issa, daħħal il-kmand hawn taħt fit-terminal tiegħek.

 

$ locust -f locust_test.py

 

Għandek tara xi ħaġa bħal din:

Ittestjar tat-Tagħbija API 2

B'mod awtomatiku, l-interface tal-web tal-ħarrub jinsab fuq http://localhost/8089. Jekk iżżur il-websajt, għandek tara interface bħal din:

Ittestjar tat-Tagħbija API 3

Mill-interface, nistgħu nispeċifikaw in-numru ta 'utenti, ir-rata ta' spawn (utenti maħluqa kull sekonda), u Ospitanti. Tista 'tikseb l-indirizz tal-host tiegħek billi tiċċekkja t-terminal fejn qed jaħdem is-server. Fil-każ tagħna, huwa fil-port 5000. Meta tikklikkja fuq Ibda tgħaqqad, inti ser tiġi ppreżentata bl-interface hawn taħt.

Ittestjar tat-Tagħbija API 4

Dan jurik diversi metriċi utli bħan-numru ta’ talbiet falluti, ħin medju għal talba, iż-żmien minimu għal talba, talbiet kull sekonda, eċċ. Ladarba tkun sodisfatt b'dak li tara, tista' tikklikkja fuq il-buttuna ta' waqfien. 


Minbarra l- istatistika tab, hemm a Mapep nawtiċi tab li turi aktar informazzjoni fil-forma ta 'graff, bħall-immaġni hawn taħt.

Hemm talbiet totali kull sekonda graff, graff tal-ħin tar-rispons, u, graff tan-numru ta' utenti, kollha plottjati kontra l-ħin. Bl-użu tal-graffs, tista 'tiddetermina kemm utenti huma aċċettabbli għal ħin ta' rispons fiss, jew tista 'tosserva l-mapep tiegħek għal ħin ta' rispons kostanti minkejja numru dejjem jiżdied ta 'utenti, u għarfien ieħor bħal dak. Jekk trid taqsam dawn stats ma' xi ħadd ieħor, tista' tniżżel rapport mill- Niżżel id-Dejta tab.

Biex tikkonkludi...

L-ittestjar tat-tagħbija tal-API tiegħek huwa attività kruċjali fil-proċess tal-iżvilupp tiegħek, għalhekk kun żgur li tkun inkorporata fiċ-ċiklu tad-disinn tiegħek. Mill-mod, tista 'wkoll twettaq tipi oħra ta' test tat-tagħbija billi tvarja l-valuri għan-numru ta 'utenti u r-rata ta' spawn. 

Jekk trid tagħmel spike test, speċifika valur kbir (jiġifieri 2000) għan-numru ta 'utenti, u mbagħad valur daqstant kbir għar-rata ta' spawn tiegħek (500 per eżempju). Dan ifisser li f'4 sekondi, ikollok l-2000 utent maħluqa u jaċċessaw l-endpoints tiegħek. Test tal-istress se jkun simili, iżda b'valur ferm aktar baxx għar-rata ta' spawn. Biex issir taf kulma tista 'tagħmel, iċċekkja l-Ħrub dokumentazzjoni