Tès chaj API ak Locust

Tès chaj API ak Locust

Tès chaj API ak Locust: Intro

Ou te pwobableman te nan sitiyasyon sa a anvan: ou ekri kòd ki fè yon bagay, yon pwen final pou egzanp. Ou teste pwen final ou lè l sèvi avèk Postman oswa lensomni, ak tout bagay ap mache byen. Ou pase pwen final la bay pwomotè kliyan an, ki moun ki Lè sa a, konsome a API epi deplwaye aplikasyon an. Men, lè sa a, API a echwe lè itilizatè yo itilize app a.

Sa a ka yon sitiyasyon super anmèdan yo dwe nan, nou pa mansyone koute chè pou yon biznis. Se poutèt sa devlopè lojisyèl fè yon varyete tès sou sistèm lojisyèl asire yo fè jan yo espere. API yo pa diferan. Anvan deplwaman, ou ta dwe fè omwen tès pèfòmans ak tès sekirite.

Tès pèfòmans yo ka gwoupe nan tès fonksyonalite ak tès chaj. Tès fonksyonalite yo se sa ou konn sèvi ak Postman oswa lensomni pou. Yo asire ke API ou fonksyone jan ou espere. Tès chaj yo, nan lòt men an, yo plis konsène ak fason API ou fè ak itilizasyon mond reyèl la ak chaj pik, e se sa ki atik sa a sou. Ann gade nan tès chaj yo an plis detay.

Ki sa ki Tès chaj API?

Tès chaj API se yon kalite tès devlopè yo itilize pou simulation chaj nòmal ak pik sou pwen final yo. Kalite tès sa a pèmèt devlopè yo evalye pèfòmans reyèl la nan yon API anvan li deplwaye. Li ede yo idantifye kapasite maksimòm fonksyone yon sistèm, kou boutèy si genyen, ak degradasyon pèfòmans. Tès chaj API yo anjeneral fè lè yo kreye itilizatè vityèl ak Lè sa a, sèvi ak yo pou teste fonksyonalite API a ansanm. 

Tès chaj API mezire mezi tankou tan repons, itilizatè konkouran, pousantaj debi, nivo itilizasyon resous, tan an mwayèn ant echèk (MTBF), tan an mwayèn pou echèk (MTTF), ak sou sa. Tout mezi sa yo ka itilize pou detèmine kijan API a ap fè byen.

Kalite tès chaj

Gen plizyè kalite tès chaj, yo chak ak ka itilize li yo. Ann pran yon gade nan kèk nan yo.

Tès chaj: Sa a se fòm debaz yon tès chaj. Li itilize pou evalye pèfòmans yon sistèm (nan ka sa a, yon API) anba chaj nòmal ak chaj pik espere.

Tès estrès: Sa a se itilize pou evalye pèfòmans yon sistèm anba yon chaj trè lou. Objektif tès sa a se pou wè si yon sistèm refè apre echèk, ak konbyen tan li pran pou fè sa. Anjeneral chaj la ogmante tou dousman jiskaske li depase kapasite sistèm lan.

Tès Spike: Sa a se yon ti kras menm jan ak tès estrès, eksepte chaj lou aplike toudenkou, kòm opoze a tou dousman ramping li moute. Kalite tès sa a reprezante sa k ap pase lè gen yon ogmantasyon toudenkou nan kantite mwayèn itilizatè oswa vizitè ou, oswa lè gen yon atak DDOS sou sistèm ou an.

Tès tranpe: Tès sa a se kontrèman ak lòt yo pi wo a. Li mete sistèm ou a anba 80% (oswa apeprè) nan chaj nòmal epi li kite li kouri pou yon peryòd tan, di 12 a 14 èdtan. Kalite tès sa a detèmine kijan yon sistèm serye sou tan.

Chaje tès API ou yo ak Locust

Devlopè yo gen aksè a yon varyete opsyon pou tès chaj API yo. Kèk zouti komen pou fè tès chaj yo se Gatling, JMeter, ak Locust. Nou pral konsantre sou Locust nan atik sa a.

Locust se yon zouti tès chaj sous louvri ki baze sou piton ki itilize pa konpayi pi gwo tankou Google, Microsoft, ak Riot Games pou teste API yo. Nan atik sa a, nou pral montre kijan pou chaje tès yon API. 

Pou leson patikilye sa a, mwen pral kreye yon API senp ak Flask. Ou ka swiv ansanm avè m oswa jis kreye API ou ak Node, oswa kèlkeswa fondasyon ou konfòtab ak.

Kondisyon pou

Piton 3

Enstalasyon & Enstalasyon

Premyèman, ou bezwen mete kanpe yon anviwònman vityèl sou PC ou pou ou pa dezòd anviwònman mondyal Python ou. Pou fè sa, kouri kòmandman sa yo. Remake byen ke kòmandman sa yo aplike nan yon tèminal Windows.

$mkdir pwojè

$ cd /d chemen\nan\pwojè

$ python -m venv venv

$ venv\Scripts\aktive

 

Premyèman, nou te kreye yon pwojè anyè. Lè sa a, nou chanje anyè aktyèl nou an pwojè. Lè sa a, nou te kreye ak aktive yon anviwònman vityèl pou Python andedan anyè sa a. 

Koulye a, nou pral deplase sou enstale Flask(nou pral sèvi ak li pou kreye pwen final yo pou fè tès chaj) ak Locust tèt li. 

 

Pou enstale Flask, kouri. Asire w ke ou nan la pwojè kote ou te kreye yon anviwònman vityèl.

$ pip enstale flakon

 

Pou enstale Locust, kouri

$ pip enstale krikèt

 

Yon fwa sa a fini, tape kòmandman sa yo. Asire w ke ou nan ou pwojè anyè lè ou fè sa.

$ kopi nul __init__.py

$ mkdir app

$ kopye nil app\app.py

$ kopye nil app\__init__.py

 

Kòmandman sa yo kreye kèk dosye ke nou pral itilize pou kreye pwen final nou yo lè l sèvi avèk Flask. Ou kapab tou kreye fichye sa yo lè l sèvi avèk eksploratè dosye ou nan chemen an. Men, ki sa ki plezi nan sa a? Yon fwa ou te fè sa, kopye kòd ki anba a nan app.py

soti nan flakon enpòte Flacon, jsonify, demann

app = Flacon (__non__)

machin_modèl = [

  { 'mak': 'Tesla', 'modèl': 'Modèl S'}

]

 

plane_models = [

  {'mak': 'Boeing', 'modèl': '747'}

]

 

@app.route('/machin')

def get_cars():

  retounen jsonify(modèl_machin)

@app.route('/planes')

def get_planes():

  retounen jsonify(plane_models)

si __name__ == '__main__':

    app.run (debug = Vrè)  

 

Kòd ki pi wo a gen yon metòd jwenn_machin itilize yo jwenn yon lis mak machin ak modèl yo, ak get_planes itilize yo jwenn yon lis mak avyon ak modèl yo. Pou nou chaje tès pwen final sa a, nou bezwen kouri app.py. Pou fè sa, kouri lòd ki anba a.

$ python chemen\a\app.py

Yon fwa ou kouri sa a, ou ta dwe wè yon bagay tankou sa a:

Tès chaj API 1

Si ou kopye URL la soti nan tèminal la epi tape Machin or plan apre / a, ou ta dwe kapab wè done yo la. Sepandan, objektif nou se teste pwen final la ak krikèt, pa ak navigatè a. Se konsa, ann fè sa. Kouri lòd sa a nan rasin ou pwojè Anyè a.

 

$ kopi nul locust_test.py

 

Sa a kreye yon fichye 'locust_test.py' nan rasin ou pwojè anyè. Yon fwa ou te fè sa, louvri dosye a epi kole nan kòd ki anba a. Nou pral eksplike li yon ti tan.

 

tan enpòte

soti nan krikèt enpòte HttpUser, travay, ant

 

klas UserBehaviour (HttpUser):

    tann_tan = ant (5, 10)

 

    @travay

    def get_cars(self):

        self.client.get('/machin')

    

    @travay

    def get_planes(self):

        self.client.get('/planes')

 

Sa a se yon egzanp debaz lè l sèvi avèk Locust pou chaje tès yon API. Premyèman, nou kreye yon klas Konpòtman Itilizatè, ki ka bay nenpòt non apwopriye men yo dwe pwolonje HttpUser. HttpUser se klas la ki pran swen nan enstansye plizyè itilizatè vityèl pou fè travay yo nou presize nan la Konpòtman Itilizatè klas. 

Yon travay espesifye pa dekore yon metòd ak la @travay dekoratè. Nou gen tou yon fonksyon ki rele ant () ki pèmèt nou presize yon seri segonn pou tann anvan nou egzekite pwochen travay la. Ou ka wè ke nou asiyen yon seri de 5 a 10 segonn pou sa nan kòd nou an. 

Pou kouri kòd la, asire w ke ou toujou nan anviwònman vityèl ou. Si sèvè k ap sèvi API a sèvi ak youn ou te kreye a, ouvri yon nouvo tèminal, chanje anyè ou an pwojè anyè, epi aktive anviwònman vityèl ou te kreye a. Ou ka jwenn kòmandman an pou aktive yon anviwònman vityèl pi wo a. Koulye a, antre nan lòd ki anba a nan tèminal ou a.

 

$ krikèt -f krikèt_test.py

 

Ou ta dwe wè yon bagay tankou sa a:

Tès chaj API 2

Pa default, koòdone entènèt krikèt la sitiye nan http://localhost/8089. Si ou vizite sit entènèt la, ou ta dwe wè yon koòdone tankou sa a:

Tès chaj API 3

Soti nan koòdone a, nou ka presize kantite itilizatè yo, pousantaj anjandre (itilizatè yo kreye pou chak segonn), ak Hôte. Ou ka jwenn adrès lame w la lè w tcheke tèminal kote sèvè a ap kouri. Nan ka nou an, li se nan pò 5000. Lè ou klike sou Kòmanse foule, ou pral prezante ak koòdone ki anba a.

Tès chaj API 4

Sa a montre w divès kalite mezi itil tankou kantite demann ki echwe, tan mwayèn pou yon demann, tan minimòm pou yon demann, demann pou chak segonn, ak sou sa. Yon fwa ou satisfè ak sa ou wè, ou ka klike sou bouton an sispann. 


Anplis la Estatistik tab, gen yon Tablo onglet ki montre plis enfòmasyon sou fòm yon graf, tankou imaj ki anba a.

Gen yon demann total pou chak dezyèm graf, graf tan repons, ak nimewo itilizatè graf, tout konplo kont tan. Sèvi ak graf yo, ou ka detèmine konbyen itilizatè yo akseptab pou yon tan repons fiks, oswa ou ka obsève tablo ou yo pou yon tan repons konstan malgre yon nimewo ogmante nan itilizatè, ak lòt apèsi tankou sa. Si ou vle pataje sa yo Stat ak yon lòt moun, ou ka telechaje yon rapò ki soti nan Download Done tab.

Pou fini...

Tès chaj API ou a se yon aktivite enpòtan nan pwosesis devlopman ou, kidonk asire w ke li enkòpore nan sik konsepsyon ou. By wout la, ou ka tou pote soti nan lòt kalite tès chaj pa varye valè yo pou kantite itilizatè yo ak pousantaj anjandre. 

Si ou vle fè yon tès Spike, presize yon gwo valè (di 2000) pou kantite itilizatè yo, ak Lè sa a, yon valè egalman gwo pou pousantaj anjandre ou (500 pou egzanp). Sa vle di ke nan 4 segonn, ou ta gen tout 2000 itilizatè yo kreye ak aksè nan pwen final ou yo. Yon tès estrès pral menm jan an, men ak yon valè pi ba anpil pou pousantaj anjandre. Pou konnen tout sa ou kapab fè, tcheke Locust la dokiman