Testiranje obremenitve API-ja s programom Locust

Testiranje obremenitve API-ja s programom Locust

Testiranje obremenitve API-ja s programom Locust: uvod

Verjetno ste že bili v tej situaciji: napišete kodo, ki nekaj naredi, na primer končno točko. Končno točko preizkusite s programoma Postman ali Insomnia in vse deluje v redu. Končno točko posredujete razvijalcu na strani odjemalca, ki nato porabi API in razmesti aplikacijo. Toda potem API ne uspe, ko uporabniki uporabljajo aplikacijo.

To je lahko zelo nadležna situacija, da ne omenjamo dragih stroškov za podjetje. Zato razvijalci programske opreme izvajajo različne teste sistemov programske opreme, da zagotovijo, da delujejo po pričakovanjih. API-ji niso nič drugačni. Pred uvedbo morate opraviti vsaj teste delovanja in varnostne teste.

Teste delovanja lahko združimo v teste funkcionalnosti in teste obremenitve. Testi funkcionalnosti so tisto, za kar običajno uporabljate Postman ali Insomnia. Zagotavljajo, da vaš API deluje, kot pričakujete. Po drugi strani pa se obremenitveni testi bolj ukvarjajo s tem, kako deluje vaš API z uporabo v resničnem svetu in največjo obremenitvijo, in o tem govori ta članek. Oglejmo si obremenitvene teste podrobneje.

Kaj je API obremenitveno testiranje?

Obremenitveno testiranje API-ja je vrsta testiranja, ki ga razvijalci uporabljajo za simulacijo normalne in največje obremenitve na končnih točkah. Tovrstno testiranje omogoča razvijalcem, da ocenijo dejansko delovanje API-ja, preden se ta uvede. Pomaga jim prepoznati največjo zmogljivost delovanja sistema, morebitna ozka grla in poslabšanje zmogljivosti. Obremenitveni testi API-ja se običajno izvajajo tako, da se ustvarijo navidezni uporabniki in se nato uporabijo za sočasno preizkušanje funkcionalnosti API-ja. 

Obremenitveni testi API-ja merijo meritve, kot so odzivni čas, sočasni uporabniki, stopnje prepustnosti, ravni izkoriščenosti virov, srednji čas med napakami (MTBF), srednji čas do napake (MTTF) itd. Vse te meritve je mogoče uporabiti za ugotavljanje, kako dobro deluje API.

Vrste testiranja obremenitve

Obstaja več vrst testiranja obremenitve, vsaka s svojimi primeri uporabe. Oglejmo si jih nekaj.

Testiranje obremenitve: To je osnovna oblika obremenitvenega testa. Uporablja se za oceno delovanja sistema (v tem primeru API-ja) pri normalni obremenitvi in ​​pričakovani najvišji obremenitvi.

Stresno testiranje: To se uporablja za oceno delovanja sistema pod zelo veliko obremenitvijo. Cilj tega testa je ugotoviti, ali se sistem obnovi po okvari in koliko časa je potrebno za to. Obremenitev se običajno počasi povečuje, dokler ne preseže zmogljivosti sistema.

Spike Testiranje: To je malo podobno testiranju izjemnih situacij, le da se velika obremenitev uporabi nenadoma, v nasprotju s počasnim povečevanjem. Ta vrsta testa predstavlja, kaj se zgodi, ko pride do nenadnega skoka v vašem povprečnem številu uporabnikov ali obiskovalcev ali ko pride do napada DDOS na vaš sistem.

Testiranje namakanja: Ta test je drugačen od drugih zgoraj. Vaš sistem postavi pod 80 % (ali približno) običajne obremenitve in ga pusti delovati dlje časa, na primer 12 do 14 ur. Ta vrsta testa določa, kako zanesljiv je sistem skozi čas.

Obremenitveno testiranje vaših API-jev s programom Locust

Razvijalci imajo dostop do različnih možnosti za obremenitveno testiranje svojih API-jev. Nekatera pogosta orodja za testiranje obremenitve so Gatling, JMeter in Locust. V tem članku se bomo osredotočili na Locust.

Locust je odprtokodno orodje za testiranje obremenitve, ki temelji na pythonu in ga uporabljajo vrhunska podjetja, kot so Google, Microsoft in Riot Games, za testiranje svojih API-jev. V tem članku bomo prikazali, kako naložiti preskusni API. 

Za to vadnico bom ustvaril preprost API s Flaskom. Lahko mi sledite ali preprosto ustvarite svoj API z Node ali katerim koli okvirom, ki vam ustreza.

Zahteve

Python 3

Namestitev in namestitev

Najprej morate v računalniku nastaviti virtualno okolje, da ne boste pokvarili svojega globalnega okolja Python. Če želite to narediti, zaženite naslednje ukaze. Upoštevajte, da ti ukazi veljajo za terminal Windows.

projekt $ mkdir

$ cd /d pot\do\projekta

$ python -m venv venv

$ venv\Skripti\aktivirati

 

Najprej smo ustvarili a Projekt imenik. Nato smo naš trenutni imenik spremenili v Projekt. Nato smo znotraj tega imenika ustvarili in aktivirali virtualno okolje za Python. 

Zdaj bomo prešli na namestitev Bučko(uporabili ga bomo za ustvarjanje končnih točk za obremenitveno testiranje) in Locust Sam. 

 

Če želite namestiti Flask, zaženite. Prepričajte se, da ste v Projekt kjer ste ustvarili virtualno okolje.

$ pip namestitvena bučka

 

Če želite namestiti Locust, zaženite

$ pip namestite kobilica

 

Ko je to opravljeno, vnesite naslednje ukaze. Prepričajte se, da ste v svojem Projekt imenik, ko to storite.

$ copy nul __init__.py

$mkdir app

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Ta ukaz ustvari nekaj datotek, ki jih bomo uporabili za ustvarjanje naših končnih točk z uporabo Flaska. Te datoteke lahko mimogrede ustvarite tudi z raziskovalcem datotek. Toda kaj je v tem zabavno? Ko to storite, kopirajte spodnjo kodo v app.py

iz bučke import Flask, jsonify, request

app = Flask(__name__)

modeli_avtomobilov = [

  { 'blagovna znamka': 'Tesla', 'model': 'Model S' }

]

 

modeli_ravni = [

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

]

 

@app.route('/avtomobili')

def get_cars():

  vrni jsonify(car_models)

@app.route('/letala')

def get_planes():

  vrni jsonify(plane_models)

če __name__ == '__main__':

    app.run(debug=True)  

 

Zgornja koda vsebuje metodo get_cars uporablja za pridobitev seznama avtomobilskih znamk in njihovih modelov ter get_planes uporablja za pridobitev seznama znamk letal in njihovih modelov. Da lahko naložimo preizkus te končne točke, moramo zagnati app.py. Če želite to narediti, zaženite spodnji ukaz.

$ python pot\do\app.py

Ko to zaženete, bi morali videti nekaj takega:

API obremenitveno testiranje 1

Če kopirate URL iz terminala in vnesete avtomobili or letala za / bi morali tam videti podatke. Vendar je naš cilj preizkusiti končno točko s kobilico, ne z brskalnikom. Torej naredimo to. Zaženite naslednji ukaz v korenu vašega Projekt imenik.

 

$ kopija nul locust_test.py

 

To ustvari datoteko 'locust_test.py' v korenu vašega Projekt imenik. Ko to storite, odprite datoteko in prilepite spodnjo kodo. Kmalu ga bomo razložili.

 

čas uvoza

iz kobilice uvozi HttpUser, opravilo, med

 

razred UserBehaviour(HttpUser):

    čakalna_čas = med (5, 10)

 

    @naloga

    def get_cars(self):

        self.client.get('/avtomobili')

    

    @naloga

    def get_planes(self):

        self.client.get('/letala')

 

To je osnovni primer uporabe Locusta za nalaganje testa API-ja. Najprej ustvarimo razred UserBehaviour, ki mu lahko damo poljubno ustrezno ime, vendar se mora razširiti HttpUser. HttpUser je razred, ki skrbi za instanciranje več virtualnih uporabnikov za izvajanje nalog, ki jih določimo v UserBehaviour razred. 

Nalogo določite tako, da metodo okrasite z @naloga dekorater. Imamo tudi funkcijo imenovano med() ki nam omogoča, da določimo obseg sekund, ki naj počakajo pred izvedbo naslednje naloge. Vidite lahko, da smo v naši kodi temu dodelili razpon od 5 do 10 sekund. 

Če želite zagnati kodo, se prepričajte, da ste še vedno v virtualnem okolju. Če tistega, ki ste ga ustvarili, uporablja strežnik, ki služi API-ju, odprite nov terminal, spremenite svoj imenik v Projekt in aktivirajte virtualno okolje, ki ste ga ustvarili. Ukaz za aktiviranje virtualnega okolja najdete zgoraj. Zdaj vnesite spodnji ukaz v svoj terminal.

 

$ locust -f locust_test.py

 

Moral bi videti nekaj takega:

API obremenitveno testiranje 2

Spletni vmesnik Locusta se privzeto nahaja na http://localhost/8089. Če obiščete spletno mesto, bi morali videti vmesnik, kot je ta:

API obremenitveno testiranje 3

V vmesniku lahko določimo število uporabnikov, stopnjo ustvarjanja (ustvarjenih uporabnikov na sekundo) in gostitelja. Naslov svojega gostitelja lahko dobite tako, da preverite terminal, na katerem deluje strežnik. V našem primeru je na vratih 5000. Ko kliknete na Začni rojiti, prikazan vam bo spodnji vmesnik.

API obremenitveno testiranje 4

To vam prikazuje različne uporabne meritve, kot so število neuspelih zahtev, povprečni čas za zahtevo, minimalni čas za zahtevo, število zahtev na sekundo itd. Ko ste zadovoljni s tem, kar vidite, lahko kliknete gumb za ustavitev. 


Poleg tega Statistika zavihek, obstaja a Charts zavihek, ki prikazuje več Podatki v obliki grafa, kot je spodnja slika.

Obstaja graf vseh zahtevkov na sekundo, graf odzivnega časa, in graf števila uporabnikov, vse narisano proti času. Z uporabo grafov lahko določite, koliko uporabnikov je sprejemljivih za fiksni odzivni čas, ali pa opazujete svoje grafikone za stalen odzivni čas kljub naraščajočemu številu uporabnikov in druge podobne vpoglede. Če želite deliti te statistika z nekom drugim, lahko prenesete poročilo iz Prenos podatkov tab.

Za zaključek ...

Obremenitveno testiranje vašega API-ja je ključna dejavnost v vašem razvojnem procesu, zato poskrbite, da bo vključeno v vaš cikel načrtovanja. Mimogrede, lahko izvedete tudi druge vrste preskusov obremenitve, tako da spremenite vrednosti za število uporabnikov in stopnjo ustvarjanja. 

Če želite izvesti skokovit test, določite veliko vrednost (recimo 2000) za število uporabnikov in nato enako veliko vrednost za vašo stopnjo pojavnosti (na primer 500). To pomeni, da bi imeli v 4 sekundah ustvarjenih vseh 2000 uporabnikov, ki bi imeli dostop do vaših končnih točk. Stresni test bo podoben, vendar z veliko nižjo vrednostjo za stopnjo drstenja. Če želite izvedeti vse, kar lahko storite, si oglejte Locust Dokumentacija