API-belastningstestning med Locust

API-belastningstestning med Locust

API-belastningstestning med Locust: Intro

Du har förmodligen varit i den här situationen förut: du skriver kod som gör något, en slutpunkt till exempel. Du testar din endpoint med Postman eller Insomnia och allt fungerar bra. Du skickar slutpunkten vidare till utvecklaren på klientsidan, som sedan konsumerar API och distribuerar applikationen. Men sedan misslyckas API:et när användarna använder appen.

Det här kan vara en väldigt irriterande situation att hamna i, för att inte tala om kostsamt för ett företag. Det är därför mjukvaruutvecklare utför en mängd olika tester på mjukvarusystem för att säkerställa att de fungerar som förväntat. API:er är inte annorlunda. Innan distributionen bör du göra åtminstone prestandatester och säkerhetstester.

Prestandatester kan grupperas i funktionstester och belastningstester. Funktionstester är det man brukar använda Postman eller Insomnia för. De ser till att ditt API fungerar som du förväntar dig. Belastningstester, å andra sidan, är mer angelägna om hur ditt API presterar med verklig användning och toppbelastning, och det är vad den här artikeln handlar om. Låt oss titta på belastningstester mer i detalj.

Vad är API-belastningstestning?

API-belastningstestning är en typ av testning som utvecklare använder för att simulera normal och toppbelastning på slutpunkter. Den här typen av testning låter utvecklare utvärdera den verkliga prestandan för ett API innan det distribueras. Det hjälper dem att identifiera den maximala driftskapaciteten för ett system, eventuella flaskhalsar och prestandaförsämring. API-belastningstester görs vanligtvis genom att skapa virtuella användare och sedan använda dem för att testa API:s funktionalitet samtidigt. 

API-belastningstester mäter mätvärden som svarstid, samtidiga användare, genomströmningshastigheter, resursutnyttjandenivåer, Mean Time Between Failure (MTBF), Mean Time To Failure (MTTF) och så vidare. Alla dessa mätvärden kan användas för att avgöra hur bra API:et fungerar.

Typer av belastningstestning

Det finns flera typer av belastningstester, var och en med sina användningsfall. Låt oss ta en titt på några av dem.

Belastningstestning: Detta är den grundläggande formen av ett belastningstest. Det används för att utvärdera prestandan hos ett system (i detta fall ett API) under normal belastning och förväntad toppbelastning.

Stresstest: Detta används för att utvärdera prestandan hos ett system under mycket tung belastning. Målet med detta test är att se om ett system återhämtar sig efter ett fel och hur lång tid det tar att göra det. Belastningen ökas vanligtvis långsamt tills den överskrider systemets kapacitet.

Spike-testning: Detta påminner lite om stresstester, förutom att tung belastning plötsligt appliceras, i motsats till att långsamt rampa upp den. Den här typen av test representerar vad som händer när det finns en plötslig ökning av ditt genomsnittliga antal användare eller besökare, eller när det sker en DDOS-attack på ditt system.

Blötläggningstestning: Detta test skiljer sig från de andra ovan. Det sätter ditt system under 80 % (eller ungefär) av normal belastning och låter det fungera under en lång period, säg 12 till 14 timmar. Denna typ av test avgör hur tillförlitligt ett system är över tid.

Ladda Testa dina API:er med Locust

Utvecklare har tillgång till en mängd olika alternativ för att ladda sina API:er. Några vanliga lasttestverktyg är Gatling, JMeter och Locust. Vi kommer att fokusera på Locust i den här artikeln.

Locust är ett pythonbaserat belastningstestverktyg med öppen källkod som används av toppföretag som Google, Microsoft och Riot Games för att testa sina API:er. I den här artikeln kommer vi att visa hur man laddar testa ett API. 

För den här handledningen kommer jag att skapa ett enkelt API med Flask. Du kan följa med mig eller bara skapa ditt API med Node, eller vilket ramverk du är bekväm med.

Krav

python 3

Installation och installation

Först måste du ställa in en virtuell miljö på din PC så att du inte förstör din globala Python-miljö. För att göra det, kör följande kommandon. Observera att dessa kommandon gäller för en Windows-terminal.

$ mkdir-projekt

$ cd /d sökväg\till\projekt

$ python -m venv venv

$ venv\Scripts\activate

 

Först skapade vi en projektet katalog. Sedan ändrade vi vår nuvarande katalog till projektet. Vi skapade och aktiverade sedan en virtuell miljö för Python i den katalogen. 

Nu går vi vidare till installationen Flask(vi kommer att använda den för att skapa ändpunkterna som ska belastningstestades) och Gräshoppa själv. 

 

För att installera Flask, kör. Se till att du är i projektet där du skapade en virtuell miljö.

$ pip installera kolv

 

För att installera Locust, kör

$ pip installera gräshoppor

 

När det är gjort, skriv in följande kommandon. Se till att du är i din projektet katalog när du gör detta.

$ copy nul __init__.py

$ mkdir app

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Dessa kommandon skapar några filer som vi kommer att använda för att skapa våra slutpunkter med hjälp av Flask. Du kan också skapa dessa filer med din filutforskare förresten. Men vad är det roliga med det? När du har gjort det kopierar du koden nedan till app.py

från kolv import Flask, jsonify, begäran

app = Flask(__namn__)

bilmodeller = [

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

]

 

plane_models = [

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

]

 

@app.route('/bilar')

def get_cars():

  returnera jsonify(bilmodeller)

@app.route('/planes')

def get_planes():

  returnera jsonify(plane_models)

om __name__ == '__main__':

    app.run(debug=True)  

 

Ovanstående kod innehåller en metod skaffa_bilar används för att få en lista över bilmärken och deras modeller, och get_planes används för att få en lista över flygplansmärken och deras modeller. För att vi ska kunna ladda testa denna slutpunkt måste vi köra app.py. För att göra det, kör kommandot nedan.

$ python sökväg\to\app.py

När du väl kört det borde du se något sånt här:

API-belastningstestning 1

Om du kopierar URL:en från terminalen och skriver bilar or plan efter / bör du kunna se data där. Vårt mål är dock att testa slutpunkten med gräshoppor, inte med webbläsaren. Så låt oss göra det. Kör följande kommando i roten av din projektet katalog.

 

$ copy nul locust_test.py

 

Detta skapar en 'locust_test.py'-fil i roten av din projektet katalog. När du har gjort det, öppna filen och klistra in koden nedan. Vi kommer att förklara det inom kort.

 

importtid

från gräshoppor import HttpUser, uppgift, mellan

 

klass Användarbeteende(HttpAnvändare):

    wait_time = between(5, 10)

 

    @uppgift

    def get_cars(self):

        self.client.get('/cars')

    

    @uppgift

    def get_planes(self):

        self.client.get('/planes')

 

Detta är ett grundläggande exempel på att använda Locust för att ladda testa ett API. Först skapar vi en klass Användarbeteende, som kan ges vilket passande namn som helst men måste förlängas HttpAnvändare. HttpAnvändare är klassen som tar hand om att instansiera flera virtuella användare för att utföra de uppgifter vi anger i Användarbeteende klass. 

En uppgift specificeras genom att dekorera en metod med @uppgift dekoratör. Vi har också en funktion som heter mellan() som tillåter oss att ange ett intervall av sekunder att vänta på innan vi utför nästa uppgift. Du kan se att vi tilldelade ett intervall på 5 till 10 sekunder för det i vår kod. 

För att köra koden, se till att du fortfarande är i din virtuella miljö. Om den du skapade används av servern som betjänar API:t, öppna en ny terminal, ändra din katalog till din projektet katalogen och aktivera den virtuella miljön du skapade. Du hittar kommandot för att aktivera en virtuell miljö ovan. Ange nu kommandot nedan i din terminal.

 

$ locust -f locust_test.py

 

Du borde se något så här:

API-belastningstestning 2

Som standard finns locusts webbgränssnitt på http://localhost/8089. Om du besöker webbplatsen bör du se ett gränssnitt så här:

API-belastningstestning 3

Från gränssnittet kan vi ange antalet användare, spawnhastighet (användare skapade per sekund) och värd. Du kan få adressen till din värd genom att kontrollera terminalen där servern körs. I vårt fall är det vid port 5000. När du klickar på Börja svärma, du kommer att presenteras med gränssnittet nedan.

API-belastningstestning 4

Det här visar dig olika användbara mätvärden som antalet misslyckade förfrågningar, genomsnittlig tid för en förfrågan, minimitiden för en förfrågan, förfrågningar per sekund, och så vidare. När du är nöjd med det du ser kan du klicka på stoppknappen. 


Förutom Statistik flik, det finns en Diagram fliken som visar mer informationen i form av en graf, som bilden nedan.

Det finns en totalt antal förfrågningar per sekund graf, svarstidsdiagram, och diagram över antalet användare, allt plottat mot tiden. Med hjälp av graferna kan du bestämma hur många användare som är acceptabla för en fast svarstid, eller så kan du observera dina diagram för en konstant svarstid trots ett ökande antal användare, och andra insikter som den. Om du vill dela dessa statistik med någon annan kan du ladda ner en rapport från Hämta data fliken.

Att avsluta...

Belastningstestning av ditt API är en avgörande aktivitet i din utvecklingsprocess, så se till att den ingår i din designcykel. Du kan förresten även utföra andra belastningstesttyper genom att variera värdena för antal användare och spawnhastighet. 

Om du vill göra ett spiktest, ange ett stort värde (säg 2000) för antalet användare och sedan ett lika stort värde för din spawnhastighet (till exempel 500). Det betyder att på 4 sekunder har du skapat alla 2000 användare och kommer åt dina slutpunkter. Ett stresstest kommer att vara liknande, men med ett mycket lägre värde för spawn rate. För att ta reda på allt du kan göra, kolla in Locust dokumentation

Förbigå TOR-censur

Förbi internetcensur med TOR

Förbi internetcensur med TOR Introduktion I en värld där tillgången till information är alltmer reglerad, har verktyg som Tor-nätverket blivit avgörande för

Läs mer »