API terhelési tesztelés Locust segítségével

API terhelési tesztelés Locust segítségével

API terhelési tesztelés Locust segítségével: Bevezetés

Valószínűleg voltál már ilyen helyzetben: olyan kódot írsz, ami csinál valamit, például egy végpontot. A Postman vagy az Insomnia segítségével teszteli a végpontot, és minden jól működik. A végpontot továbbadja az ügyféloldali fejlesztőnek, aki ezután felhasználja a API és telepíti az alkalmazást. Ekkor azonban az API meghibásodik, amikor a felhasználók használják az alkalmazást.

Ez rendkívül bosszantó helyzet lehet, nem beszélve arról, hogy költséges egy vállalkozás számára. Ez az oka annak, hogy a szoftverfejlesztők különféle teszteket végeznek a szoftverrendszereken, hogy megbizonyosodjanak arról, hogy az elvárásoknak megfelelően működnek. Az API-k nem különböznek egymástól. A telepítés előtt legalább teljesítményteszteket és biztonsági teszteket kell elvégeznie.

A teljesítménytesztek funkcionális tesztekre és terhelési tesztekre csoportosíthatók. A funkcionalitástesztekre általában a Postmant vagy az Insomniát használod. Biztosítják, hogy az API az elvárásoknak megfelelően működjön. A terhelési tesztek viszont inkább azzal foglalkoznak, hogy az API hogyan teljesít a valós használat és a csúcsterhelés mellett, és ez a cikk erről szól. Nézzük meg részletesebben a terhelési teszteket.

Mi az API terhelési tesztelés?

Az API-terhelési tesztelés egy olyan tesztelési módszer, amelyet a fejlesztők a végpontok normál és csúcsterhelésének szimulálására használnak. Ez a fajta tesztelés lehetővé teszi a fejlesztők számára, hogy kiértékeljék egy API valós teljesítményét a telepítés előtt. Segít nekik azonosítani a rendszer maximális működési kapacitását, a szűk keresztmetszeteket, ha vannak, és a teljesítmény romlását. Az API terhelési tesztjeit általában virtuális felhasználók létrehozásával végzik, majd velük párhuzamosan tesztelik az API funkcióit. 

Az API terhelési tesztjei olyan mutatókat mérnek, mint a válaszidő, a párhuzamos felhasználók, az átviteli sebesség, az erőforrás-kihasználtsági szintek, a meghibásodások közötti átlagos idő (MTBF), a meghibásodásig eltelt átlagos idő (MTTF) és így tovább. Mindezek a mérőszámok felhasználhatók annak meghatározására, hogy mennyire jól működik az API.

Terhelésvizsgálat típusai

A terhelési tesztelésnek többféle típusa létezik, mindegyiknek megvan a maga használati esete. Nézzünk meg néhányat közülük.

Terhelési teszt: Ez a terhelési teszt alapvető formája. Egy rendszer (ebben az esetben egy API) teljesítményének értékelésére szolgál normál terhelés és várható csúcsterhelés mellett.

Stressz teszt: Ezt a rendszer teljesítményének értékelésére használják nagyon nagy terhelés mellett. Ennek a tesztnek az a célja, hogy megtudja, helyreáll-e a rendszer meghibásodás után, és mennyi időbe telik. A terhelést általában lassan emelik fel, amíg meg nem haladja a rendszer képességeit.

Spike tesztelés: Ez egy kicsit hasonlít a stresszteszthez, kivéve, hogy hirtelen nagy terhelést alkalmaznak, szemben a lassú felfutással. Ez a fajta teszt azt mutatja be, hogy mi történik, ha hirtelen megugrik a felhasználók vagy látogatók átlagos száma, vagy ha DDOS támadás éri a rendszert.

Áztatási teszt: Ez a teszt eltér a fentiektől. Ez a rendszert a normál terhelés 80%-a (vagy körülbelül) alá helyezi, és hosszú ideig, mondjuk 12-14 óráig, működni hagyja. Ez a fajta teszt meghatározza, hogy egy rendszer mennyire megbízható az idő múlásával.

Az API-k betöltése a Locust segítségével

A fejlesztők számos lehetőséghez férhetnek hozzá API-jaik terhelési teszteléséhez. Néhány gyakori terheléstesztelő eszköz a Gatling, a JMeter és a Locust. Ebben a cikkben a Locust-ra fogunk összpontosítani.

A Locust egy Python-alapú, nyílt forráskódú terheléstesztelő eszköz, amelyet olyan vezető cégek, mint a Google, a Microsoft és a Riot Games használnak API-k tesztelésére. Ebben a cikkben bemutatjuk, hogyan tölthet be teszt API-t. 

Ehhez az oktatóanyaghoz egy egyszerű API-t fogok létrehozni a Flask segítségével. Követhet velem, vagy egyszerűen létrehozhatja API-ját a Node-dal, vagy bármilyen keretrendszerrel, amiben kényelmes.

követelmények

Python 3

Beállítás és telepítés

Először is be kell állítania egy virtuális környezetet a számítógépén, hogy ne rontsa össze a globális Python-környezetet. Ehhez futtassa a következő parancsokat. Vegye figyelembe, hogy ezek a parancsok a Windows terminálokra vonatkoznak.

$ mkdir projekt

$ cd /d elérési út\to\projekthez

$ python -m venv venv

$ venv\Scripts\activate

 

Először létrehoztuk a program Könyvtár. Ezután megváltoztattuk a jelenlegi könyvtárunkat program. Ezután létrehoztunk és aktiváltunk egy virtuális környezetet a Python számára ebben a könyvtárban. 

Most folytatjuk a telepítést Palack(ezt fogjuk használni a terheléses tesztelendő végpontok létrehozásához) és Sáska maga. 

 

A Flask telepítéséhez futtassa. Győződjön meg róla, hogy benne van program ahol virtuális környezetet hozott létre.

$ pip telepítő lombik

 

A Locust telepítéséhez futtassa

$ pip install locust

 

Ha ez megtörtént, írja be a következő parancsokat. Győződjön meg róla, hogy benne vagy program könyvtárat, amikor ezt megteszi.

$ copy nul __init__.py

$ mkdir alkalmazás

$ copy null app\app.py

$ copy null app\__init__.py

 

Ez a parancs létrehoz néhány fájlt, amelyeket a végpontok Flask segítségével történő létrehozásához fogunk használni. Ezeket a fájlokat egyébként a fájlkezelővel is létrehozhatja. De mi ebben a mulatság? Ha ezt megtette, másolja be az alábbi kódot app.py

lombikból import Lombik, jsonify, kérés

app = Lombik(__name__)

car_models = [

  { 'márka': 'Tesla', 'modell': 'Model S' }

]

 

plane_models = [

  { 'márka': 'Boeing', 'modell': '747' }

]

 

@app.route('/cars')

def get_cars():

  return jsonify(car_models)

@app.route('/repülők')

def get_planes():

  return jsonify(plane_models)

ha __név__ == '__ fő__':

    app.run(debug=True)  

 

A fenti kód tartalmaz egy metódust get_cars használt autómárkák és modelljeik listájához, ill get_planes használtak egy listát a repülőgépmárkákról és modelljeikről. Ahhoz, hogy ezt a végpontot betölthessük, futtatnunk kell az app.py-t. Ehhez futtassa az alábbi parancsot.

$ python elérési út\to\app.py

Miután futtattad, valami ilyesmit kell látnod:

API terhelési tesztelés 1

Ha kimásolja az URL-t a terminálról, és beírja autók or tervek a / után látnia kell az ott lévő adatokat. A célunk azonban az, hogy a végpontot sáskával teszteljük, nem a böngészővel. Tehát tegyük ezt. Futtassa a következő parancsot a gyökérben program könyvtárban.

 

$ copy nul locust_test.py

 

Ez létrehoz egy „locust_test.py” fájlt a gyökérben program Könyvtár. Ha ezt megtette, nyissa meg a fájlt, és illessze be az alábbi kódot. Hamarosan elmagyarázzuk.

 

import idő

sáska importból HttpUser, feladat, között

 

osztály felhasználói viselkedés (HttpUser):

    várakozási_idő = között(5, 10)

 

    @feladat

    def get_cars(self):

        self.client.get('/cars')

    

    @feladat

    def get_planes(self):

        self.client.get('/planes')

 

Ez egy alapvető példa a Locust használatára egy API betöltésének tesztelésére. Először létrehozunk egy osztályt Felhasználói viselkedés, amely bármilyen megfelelő nevet kaphat, de ki kell terjesztenie HttpUser. HttpUser az az osztály, amely több virtuális felhasználó példányosításáról gondoskodik az általunk megadott feladatok végrehajtásához Felhasználói viselkedés osztály. 

Egy feladat megadása metódus díszítésével történik a @feladat lakberendező. Nekünk van egy függvényünk is között() Ez lehetővé teszi számunkra, hogy megadjuk a másodpercek tartományát, ameddig várni kell a következő feladat végrehajtása előtt. Láthatja, hogy a kódunkban ehhez 5 és 10 másodperc közötti tartományt rendeltünk. 

A kód futtatásához győződjön meg arról, hogy továbbra is a virtuális környezetben van. Ha az általad létrehozottat az API-t kiszolgáló szerver használja, nyisson meg egy új terminált, módosítsa a könyvtárát a saját program könyvtárat, és aktiválja a létrehozott virtuális környezetet. A virtuális környezet aktiválására szolgáló parancsot fent találja. Most írja be az alábbi parancsot a termináljába.

 

$ locust -f locust_test.py

 

Látnia kellene valami ilyesmit:

API terhelési tesztelés 2

Alapértelmezés szerint a sáska webes felülete a http://localhost/8089 címen található. Ha meglátogatja a webhelyet, egy ehhez hasonló felületet kell látnia:

API terhelési tesztelés 3

Az interfészen megadhatjuk a felhasználók számát, a spawn arányt (másodpercenként létrehozott felhasználók) és a gazdagépet. A gazdagép címét úgy kaphatja meg, ha megnézi azt a terminált, ahol a szerver fut. Esetünkben az 5000-es porton van. Ha rákattint Kezdj el nyüzsögni, az alábbi felület jelenik meg.

API terhelési tesztelés 4

Ez számos hasznos mérőszámot mutat meg, például a sikertelen kérelmek számát, a kérés átlagos időtartamát, a kérés minimális időtartamát, a másodpercenkénti kéréseket és így tovább. Ha elégedett a látottakkal, kattintson a leállítás gombra. 


Mellett Statisztika lapon van egy táblázatok lap, amely többet mutat információ grafikon formájában, mint az alábbi képen.

Van egy az összes kérés másodpercenkénti grafikonja, válaszidő grafikon, és a a felhasználók száma grafikonon, minden összeesküdve az idővel. A grafikonok segítségével meghatározhatja, hogy egy fix válaszidő mellett hány felhasználót fogadhat el, vagy megfigyelheti diagramjait állandó válaszidőre a növekvő számú felhasználó ellenére, és egyéb hasonló betekintések. Ha szeretnéd megosztani ezeket statisztika valaki mással, letölthet egy jelentést a Adatok letöltése Tab.

Következtetni...

Az API terheléses tesztelése kulcsfontosságú tevékenység a fejlesztési folyamatban, ezért győződjön meg róla, hogy beépül a tervezési ciklusba. Egyébként más típusú terhelési teszteket is végezhet a felhasználók számának és a spawn rate értékeinek változtatásával. 

Ha spike-tesztet szeretne végezni, adjon meg egy nagy értéket (mondjuk 2000-et) a felhasználók számához, majd egy ugyanolyan nagy értéket a spawn arányhoz (például 500). Ez azt jelenti, hogy 4 másodpercen belül mind a 2000 felhasználó létrehozza és eléri a végpontjait. A stresszteszt hasonló lesz, de a spawn arány sokkal alacsonyabb értékkel. Ha meg szeretné tudni, mit tehet, nézze meg a Locustot dokumentáció