Testimi i ngarkimit të API me Locust

Testimi i ngarkimit të API me Locust

Testimi i ngarkimit të API me Locust: Hyrje

Ju ndoshta keni qenë në këtë situatë më parë: shkruani kod që bën diçka, për shembull një pikë fundore. Ju testoni pikën tuaj përfundimtare duke përdorur Postman ose Insomnia, dhe gjithçka funksionon mirë. Ju ia kaloni pikën fundore zhvilluesit të klientit, i cili më pas e konsumon atë API dhe vendos aplikacionin. Por më pas, API dështon kur përdoruesit përdorin aplikacionin.

Kjo mund të jetë një situatë super e bezdisshme për të qenë në të, për të mos përmendur të kushtueshme për një biznes. Kjo është arsyeja pse zhvilluesit e softuerit kryejnë një sërë testesh në sistemet softuerike për të siguruar që ato të performojnë siç pritej. API-të nuk janë të ndryshme. Para vendosjes, duhet të bëni të paktën teste të performancës dhe teste sigurie.

Testet e performancës mund të grupohen në teste funksionaliteti dhe teste të ngarkesës. Testet e funksionalitetit janë ato për të cilat zakonisht përdorni Postman ose Insomnia. Ata sigurojnë që API juaj të funksionojë ashtu siç prisni. Testet e ngarkesës, nga ana tjetër, kanë të bëjnë më shumë me mënyrën se si funksionon API-ja juaj me përdorimin e botës reale dhe ngarkesën maksimale, dhe kjo është ajo që ka të bëjë ky artikull. Le të shohim më në detaje testet e ngarkesës.

Çfarë është testimi i ngarkesës API?

Testimi i ngarkesës API është një lloj testimi që zhvilluesit përdorin për të simuluar ngarkesën normale dhe maksimale në pikat fundore. Ky lloj testimi i lejon zhvilluesit të vlerësojnë performancën në botën reale të një API përpara se të vendoset. Ai i ndihmon ata të identifikojnë kapacitetin maksimal të funksionimit të një sistemi, pengesat nëse ka, dhe degradimin e performancës. Testet e ngarkesës së API zakonisht bëhen duke krijuar përdorues virtualë dhe më pas duke i përdorur ata për të testuar funksionimin e API-së njëkohësisht. 

Testet e ngarkesës së API matin metrikat si koha e përgjigjes, përdoruesit e njëkohshëm, nivelet e xhiros, nivelet e përdorimit të burimeve, Koha mesatare midis dështimit (MTBF), Koha mesatare deri në dështim (MTTF) dhe kështu me radhë. Të gjitha këto metrika mund të përdoren për të përcaktuar se sa mirë po funksionon API.

Llojet e testimit të ngarkesës

Ekzistojnë disa lloje të testimit të ngarkesës, secila me rastet e përdorimit të saj. Le të hedhim një vështrim në disa prej tyre.

Testimi i ngarkesës: Kjo është forma bazë e testit të ngarkesës. Përdoret për të vlerësuar performancën e një sistemi (në këtë rast, një API) nën ngarkesën normale dhe ngarkesën maksimale të pritur.

Testimi i stresit: Kjo përdoret për të vlerësuar performancën e një sistemi nën një ngarkesë shumë të rëndë. Qëllimi i këtij testi është të shihet nëse një sistem rimëkëmbet pas dështimit dhe sa kohë duhet për ta bërë këtë. Ngarkesa zakonisht rritet ngadalë derisa të tejkalojë aftësitë e sistemit.

Testimi i spikes: Kjo është paksa e ngjashme me testimin e stresit, përveçse ngarkesa e rëndë aplikohet papritmas, në krahasim me rritjen e ngadaltë të saj. Ky lloj testi përfaqëson atë që ndodh kur ka një rritje të papritur në numrin tuaj mesatar të përdoruesve ose vizitorëve, ose kur ka një sulm DDOS në sistemin tuaj.

Testimi i njomjes: Ky test është ndryshe nga të tjerët më lart. Ai e vendos sistemin tuaj nën 80% (ose rreth) të ngarkesës normale dhe e lë atë të funksionojë për një periudhë të gjatë, le të themi 12 deri në 14 orë. Ky lloj testi përcakton se sa i besueshëm është një sistem me kalimin e kohës.

Ngarkoni testimin e API-ve tuaja me Locust

Zhvilluesit kanë akses në një sërë opsionesh për testimin e ngarkesës së API-ve të tyre. Disa mjete të zakonshme të testimit të ngarkesës janë Gatling, JMeter dhe Locust. Ne do të përqendrohemi te Locust në këtë artikull.

Locust është një mjet testimi i ngarkesës me burim të hapur i bazuar në python i përdorur nga kompanitë kryesore si Google, Microsoft dhe Riot Games për të testuar API-të e tyre. Në këtë artikull, ne do të demonstrojmë se si të ngarkojmë testimin e një API. 

Për këtë tutorial, unë do të krijoj një API të thjeshtë me Flask. Ju mund të ndiqni së bashku me mua ose thjesht të krijoni API-në tuaj me Node, ose çfarëdo kuadri me të cilin jeni të kënaqur.

Kërkesat

Python 3

Konfigurimi & Instalimi

Së pari, duhet të konfiguroni një mjedis virtual në PC tuaj në mënyrë që të mos ngatërroni mjedisin tuaj global Python. Për ta bërë këtë, ekzekutoni komandat e mëposhtme. Vini re se këto komanda zbatohen për një terminal të Windows.

$ mkdir projekt

$ cd /d shteg\tek\projekt

$ python -m venv venv

$ venv\Scripts\aktivizo

 

Së pari, ne krijuam një projekt drejtoria. Pastaj ne ndryshuam direktorinë tonë aktuale në projekt. Më pas krijuam dhe aktivizuam një mjedis virtual për Python brenda asaj direktorie. 

Tani, ne do të kalojmë në instalimin Balonë(do ta përdorim atë për të krijuar pikat fundore që do të testohen nga ngarkesa) dhe karkalec vetë. 

 

Për të instaluar Flask, ekzekutoni. Sigurohuni që të jeni në projekt ku keni krijuar një mjedis virtual.

Balonë instalimi $ pip

 

Për të instaluar Locust, ekzekutoni

$ pip instaloni karkalec

 

Pasi të jetë bërë kjo, shkruani komandat e mëposhtme. Sigurohuni që jeni në tuajën projekt drejtoria kur e bëni këtë.

$ kopje nul __init__.py

Aplikacioni $ mkdir

$ kopje nul app\app.py

$ kopjoni aplikacionin nul\__init__.py

 

Kjo komanda krijon disa skedarë të cilët do t'i përdorim për të krijuar pikat tona fundore duke përdorur Flask. Ju gjithashtu mund t'i krijoni këto skedarë duke përdorur eksploruesin tuaj të skedarëve. Por çfarë është kënaqësia në këtë? Pasi ta keni bërë këtë, kopjoni kodin e mëposhtëm në app.py

nga flask import Flask, jsonify, kërkesë

aplikacioni = Flask (__name__)

modele_makine = [

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

]

 

modele_aeroplani = [

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

]

 

@app.route('/cars')

def get_cars():

  kthej jsonify (modelet e_makinës)

@app.route('/planes')

def get_planes():

  kthej jsonify(plane_models)

nëse __name__ == '__ kryesore__':

    app.run(debug=E vërtetë)  

 

Kodi i mësipërm përmban një metodë merr_makina përdoret për të marrë një listë të markave të makinave dhe modeleve të tyre, dhe merrni_aeroplanët përdoret për të marrë një listë të markave të avionëve dhe modeleve të tyre. Që ne të ngarkojmë testimin e kësaj pike fundore, duhet të ekzekutojmë app.py. Për ta bërë këtë, ekzekutoni komandën e mëposhtme.

$ python shteg\to\app.py

Pasi ta ekzekutoni atë, duhet të shihni diçka si kjo:

Testimi i ngarkimit të API 1

Nëse kopjoni URL-në nga terminali dhe shkruani makina or aeroplanët pas /, ju duhet të jeni në gjendje të shihni të dhënat atje. Sidoqoftë, qëllimi ynë është të testojmë pikën përfundimtare me karkalec, jo me shfletues. Pra, le ta bëjmë atë. Ekzekutoni komandën e mëposhtme në rrënjën tuaj projekt directory.

 

$ kopje nul locust_test.py

 

Kjo krijon një skedar 'locust_test.py' në rrënjën e skedarit tuaj projekt drejtoria. Pasi ta keni bërë këtë, hapni skedarin dhe ngjisni kodin e mëposhtëm. Ne do ta shpjegojmë së shpejti.

 

koha e importit

nga importi i karkalecit HttpUser, detyrë, ndërmjet

 

Sjellja e përdoruesit të klasës (HttpUser):

    koha_pritje = ndërmjet (5, 10)

 

    @detyrë

    def get_cars (vetë):

        self.client.get('/cars')

    

    @detyrë

    def get_planes (vetë):

        self.client.get('/planes')

 

Ky është një shembull bazë i përdorimit të Locust për të ngarkuar testimin e një API. Së pari, ne krijojmë një klasë Sjellja e përdoruesit, të cilit mund t'i jepet çdo emër i përshtatshëm, por duhet të shtrihet Përdoruesi Http. Përdoruesi Http është klasa që kujdeset për instantimin e përdoruesve të shumtë virtualë për të kryer detyrat që specifikojmë në Sjellja e përdoruesit klasë. 

Një detyrë specifikohet duke dekoruar një metodë me @detyrë dekorues. Ne gjithashtu kemi një funksion të quajtur ndërmjet() që na lejon të specifikojmë një varg sekondash për të pritur përpara se të ekzekutojmë detyrën tjetër. Ju mund të shihni se ne kemi caktuar një gamë prej 5 deri në 10 sekonda për këtë në kodin tonë. 

Për të ekzekutuar kodin, sigurohuni që jeni ende në mjedisin tuaj virtual. Nëse ai që keni krijuar po përdoret nga serveri që shërben API-në, hapni një terminal të ri, ndryshoni drejtorinë tuaj në dosjen tuaj projekt drejtorisë dhe aktivizoni mjedisin virtual që keni krijuar. Më sipër mund ta gjeni komandën për aktivizimin e një mjedisi virtual. Tani, futni komandën e mëposhtme në terminalin tuaj.

 

$ karkalec -f locust_test.py

 

Ju duhet të shihni diçka si kjo:

Testimi i ngarkimit të API 2

Si parazgjedhje, ndërfaqja e internetit e Locust ndodhet në http://localhost/8089. Nëse vizitoni faqen e internetit, duhet të shihni një ndërfaqe si kjo:

Testimi i ngarkimit të API 3

Nga ndërfaqja, ne mund të specifikojmë numrin e përdoruesve, shpejtësinë e pjelljes (përdoruesit e krijuar për sekondë) dhe Host. Ju mund të merrni adresën e hostit tuaj duke kontrolluar terminalin ku po funksionon serveri. Në rastin tonë, është në portin 5000. Kur klikoni mbi Filloni të grumbulloheni, ju do të paraqiteni me ndërfaqen më poshtë.

Testimi i ngarkimit të API 4

Kjo ju tregon metrika të ndryshme të dobishme si numri i kërkesave të dështuara, koha mesatare për një kërkesë, koha minimale për një kërkesë, kërkesat për sekondë, etj. Pasi të jeni të kënaqur me atë që shihni, mund të klikoni në butonin e ndalimit. 


Përveç të dhëna statistikore tab, ka një Listat skedë që tregon më shumë informacion në formën e një grafiku, si në imazhin më poshtë.

Nuk është një Kërkesat totale për grafikun e dytë, grafiku i kohës së përgjigjes, grafiku i numrit të përdoruesve, të gjitha të komplotuara kundër kohës. Duke përdorur grafikët, mund të përcaktoni se sa përdorues janë të pranueshëm për një kohë fikse përgjigjeje, ose mund të vëzhgoni grafikët tuaj për një kohë përgjigjeje konstante, pavarësisht nga numri në rritje i përdoruesve, dhe njohuri të tjera si kjo. Nëse dëshironi t'i ndani këto Statistikat me dikë tjetër, mund të shkarkoni një raport nga Shkarkoni të dhënat Tab.

Për të përfunduar...

Testimi i ngarkimit të API-së tuaj është një aktivitet thelbësor në procesin tuaj të zhvillimit, prandaj sigurohuni që të jetë i përfshirë në ciklin tuaj të projektimit. Nga rruga, ju gjithashtu mund të kryeni lloje të tjera të testeve të ngarkesës duke ndryshuar vlerat për numrin e përdoruesve dhe shkallën e pjelljes. 

Nëse dëshironi të bëni një test spike, specifikoni një vlerë të madhe (të themi 2000) për numrin e përdoruesve dhe më pas një vlerë po aq të madhe për shkallën tuaj të pjelljes (500 për shembull). Kjo do të thotë që në 4 sekonda, do të kishit të 2000 përdoruesit të krijuar dhe të hynin në pikat tuaja përfundimtare. Një test stresi do të jetë i ngjashëm, por me një vlerë shumë më të ulët për shkallën e pjelljes. Për të zbuluar gjithçka që mund të bëni, shikoni Locust Dokumentacioni