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:
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:
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:
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.
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.