API zátěžové testování s Locustem

API zátěžové testování s Locustem

Zátěžové testování API s Locust: Úvod

Pravděpodobně jste již byli v této situaci: píšete kód, který něco dělá, například koncový bod. Otestujete svůj koncový bod pomocí Postman nebo Insomnia a vše funguje dobře. Koncový bod předáte vývojáři na straně klienta, který pak spotřebuje API a nasadí aplikaci. Ale pak API selže, když uživatelé používají aplikaci.

To může být velmi nepříjemná situace, nemluvě o nákladných pro podnikání. To je důvod, proč vývojáři softwaru provádějí různé testy softwarových systémů, aby zajistili, že budou fungovat podle očekávání. API se neliší. Před nasazením byste měli provést alespoň testy výkonu a testy zabezpečení.

Testy výkonu lze seskupit do testů funkčnosti a zátěžových testů. Testy funkčnosti jsou to, k čemu obvykle používáte Postman nebo Insomnia. Zajišťují, že vaše API funguje tak, jak očekáváte. Na druhou stranu zátěžové testy se více zabývají tím, jak si vaše API vede s reálným využitím a maximální zátěží, a o tom je tento článek. Podívejme se na zátěžové testy podrobněji.

Co je zátěžové testování API?

Testování zatížení API je typ testování, který vývojáři používají k simulaci normálního a špičkového zatížení koncových bodů. Tento druh testování umožňuje vývojářům vyhodnotit skutečný výkon API před jeho nasazením. Pomáhá jim identifikovat maximální provozní kapacitu systému, případná úzká hrdla a snížení výkonu. Testy zátěže API se obvykle provádějí vytvořením virtuálních uživatelů a jejich použitím k souběžnému testování funkčnosti API. 

Testy zatížení API měří metriky, jako je doba odezvy, souběžní uživatelé, rychlost propustnosti, úrovně využití zdrojů, střední doba mezi selháním (MTBF), střední doba do selhání (MTTF) a tak dále. Všechny tyto metriky lze použít k určení toho, jak dobře si API vede.

Typy zátěžového testování

Existuje několik typů zátěžového testování, z nichž každý má své případy použití. Pojďme se na některé z nich podívat.

Testování zátěže: Toto je základní forma zátěžového testu. Používá se k vyhodnocení výkonu systému (v tomto případě API) při normální zátěži a očekávané špičkové zátěži.

Zátěžové testování: To se používá k hodnocení výkonu systému při velmi velkém zatížení. Cílem tohoto testu je zjistit, zda se systém po selhání zotaví a jak dlouho to trvá. Zátěž se obvykle pomalu zvyšuje, dokud nepřekročí možnosti systému.

Špičkový test: Je to trochu podobné zátěžovému testování, s tím rozdílem, že velké zatížení je aplikováno náhle, na rozdíl od pomalého zvyšování. Tento druh testu představuje, co se stane, když dojde k náhlému nárůstu průměrného počtu uživatelů nebo návštěvníků, nebo když dojde k útoku DDOS na váš systém.

Zkouška namáčení: Tento test je na rozdíl od ostatních výše uvedených. Dostane váš systém pod 80 % (nebo tak nějak) běžné zátěže a nechá jej běžet po dlouhou dobu, řekněme 12 až 14 hodin. Tento druh testu určuje, jak spolehlivý je systém v průběhu času.

Zátěžové testování vašich API s Locustem

Vývojáři mají přístup k různým možnostem zátěžového testování jejich rozhraní API. Některé běžné nástroje pro testování zátěže jsou Gatling, JMeter a Locust. V tomto článku se zaměříme na Locust.

Locust je open-source nástroj pro testování zátěže založený na pythonu, který používají špičkové společnosti jako Google, Microsoft a Riot Games k testování svých API. V tomto článku si ukážeme, jak provést zátěžový test API. 

Pro tento tutoriál vytvořím jednoduché API s Flask. Můžete se mnou následovat nebo si jen vytvořit své API pomocí Node nebo jakéhokoli frameworku, který vám vyhovuje.

požadavky

Python 3

Nastavení a instalace

Nejprve si musíte na svém PC nastavit virtuální prostředí, abyste si nepokazili globální prostředí Pythonu. Chcete-li to provést, spusťte následující příkazy. Všimněte si, že tyto příkazy platí pro terminál Windows.

$ projekt mkdir

$ cd /d cesta\k\projektu

$ python -m venv venv

$ venv\Scripts\activate

 

Nejprve jsme vytvořili a projekt adresář. Poté jsme změnili náš aktuální adresář na projekt. Poté jsme v tomto adresáři vytvořili a aktivovali virtuální prostředí pro Python. 

Nyní přejdeme k instalaci Baňka(použijeme jej k vytvoření koncových bodů, které mají být testovány zátěží) a kobylka sám. 

 

Chcete-li nainstalovat Flask, spusťte. Ujistěte se, že jste v projekt kde jste vytvořili virtuální prostředí.

$ pip instalační baňka

 

Chcete-li nainstalovat Locust, spusťte

$ pip nainstalovat kobylku

 

Jakmile to uděláte, zadejte následující příkazy. Ujistěte se, že jste ve svém projekt adresář, když to uděláte.

$ kopie nul __init__.py

$ mkdir aplikace

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Tento příkaz vytvoří nějaké soubory, které použijeme k vytvoření našich koncových bodů pomocí Flask. Tyto soubory můžete mimochodem vytvořit také pomocí vašeho průzkumníka souborů. Ale co je na tom zábavného? Jakmile to uděláte, zkopírujte níže uvedený kód do app.py

from flask import Flask, jsonify, request

app = Flask(__name__)

modely_aut = [

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

]

 

modely letadel = [

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

]

 

@app.route('/cars')

def get_cars():

  return jsonify(car_models)

@app.route('/planes')

def get_planes():

  return jsonify(plane_models)

if __name__ == '__main__':

    app.run(debug=True)  

 

Výše uvedený kód obsahuje metodu get_cars slouží k získání seznamu značek automobilů a jejich modelů a get_planes slouží k získání seznamu značek letadel a jejich modelů. Abychom mohli načíst test tohoto koncového bodu, musíme spustit app.py. Chcete-li to provést, spusťte níže uvedený příkaz.

$ python path\to\app.py

Jakmile to spustíte, měli byste vidět něco takového:

Zátěžové testování API 1

Pokud zkopírujete URL z terminálu a napište auta or letadla za /, měli byste tam vidět data. Naším cílem je však otestovat koncový bod pomocí kobylky, nikoli pomocí prohlížeče. Tak pojďme na to. Spusťte následující příkaz v kořenovém adresáři vašeho projekt adresáře.

 

$ copy nul locust_test.py

 

Tím se v kořenovém adresáři vašeho vytvoří soubor 'locust_test.py' projekt adresář. Jakmile to uděláte, otevřete soubor a vložte níže uvedený kód. Brzy si to vysvětlíme.

 

čas importu

from locust import HttpUser, task, between

 

class UserBehaviour(HttpUser):

    wait_time = mezi(5, 10)

 

    @úkol

    def get_cars(self):

        self.client.get('/cars')

    

    @úkol

    def get_planes(self):

        self.client.get('/planes')

 

Toto je základní příklad použití Locustu k načtení testu API. Nejprve vytvoříme třídu Uživatelské chování, který může mít jakýkoli vhodný název, ale musí se rozšířit HttpUser. HttpUser je třída, která se stará o vytváření instancí více virtuálních uživatelů pro provádění úkolů, které specifikujeme v Uživatelské chování třída. 

Úloha je specifikována zdobením metody pomocí @úkol dekoratér. Máme také funkci tzv mezi() což nám umožňuje určit rozsah sekund, po který se čeká před provedením další úlohy. Můžete vidět, že jsme tomu v našem kódu přiřadili rozsah 5 až 10 sekund. 

Chcete-li spustit kód, ujistěte se, že jste stále ve svém virtuálním prostředí. Pokud ten, který jste vytvořili, používá server obsluhující API, otevřete nový terminál a změňte svůj adresář na svůj projekt adresář a aktivujte virtuální prostředí, které jste vytvořili. Příkaz pro aktivaci virtuálního prostředí najdete výše. Nyní zadejte do svého terminálu níže uvedený příkaz.

 

$ locust -f locust_test.py

 

Měli byste vidět něco takového:

Zátěžové testování API 2

Ve výchozím nastavení je webové rozhraní kobylky umístěno na adrese http://localhost/8089. Pokud navštívíte webovou stránku, měli byste vidět rozhraní, jako je toto:

Zátěžové testování API 3

Z rozhraní můžeme zadat počet uživatelů, rychlost spawn (počet vytvořených uživatelů za sekundu) a hostitele. Adresu svého hostitele můžete získat kontrolou terminálu, na kterém běží server. V našem případě je na portu 5000. Když kliknete na Začni se rojit, zobrazí se vám níže uvedené rozhraní.

Zátěžové testování API 4

To vám ukazuje různé užitečné metriky, jako je počet neúspěšných požadavků, průměrný čas na požadavek, minimální čas na požadavek, požadavky za sekundu atd. Jakmile budete spokojeni s tím, co vidíte, můžete kliknout na tlačítko stop. 


Vedle Statistika karta, tam je grafy karta, která zobrazuje více informace ve formě grafu, jako na obrázku níže.

Existuje graf celkových požadavků za sekundu, graf doby odezvy, a graf počtu uživatelů, vše zakresleno proti času. Pomocí grafů můžete určit, kolik uživatelů je přijatelných pro pevnou dobu odezvy, nebo můžete sledovat své grafy pro konstantní dobu odezvy navzdory rostoucímu počtu uživatelů a další podobné poznatky. Pokud je chcete sdílet Statistiky s někým jiným si můžete stáhnout zprávu z webu Stáhnout data Karta.

Na závěr...

Zátěžové testování vašeho API je klíčovou činností ve vašem vývojovém procesu, takže se ujistěte, že je začleněno do vašeho návrhového cyklu. Mimochodem, můžete také provádět jiné typy zátěžových testů změnou hodnot počtu uživatelů a rychlosti spawnování. 

Chcete-li provést test špiček, zadejte velkou hodnotu (řekněme 2000) pro počet uživatelů a poté stejně velkou hodnotu pro rychlost spawnování (například 500). To znamená, že za 4 sekundy budete mít vytvořeno všech 2000 XNUMX uživatelů a mít přístup ke svým koncovým bodům. Zátěžový test bude podobný, ale s mnohem nižší hodnotou pro rychlost spawnování. Chcete-li zjistit, co všechno můžete udělat, podívejte se na Locust dokumentace