API-belastningstest med Locust

API-belastningstest med Locust

API-belastningstest med Locust: Intro

Du har sikkert været i denne situation før: du skriver kode, der gør noget, f.eks. et endepunkt. Du tester dit endepunkt ved hjælp af Postman eller Insomnia, og alt fungerer fint. Du videregiver slutpunktet til udvikleren på klientsiden, som derefter bruger API og implementerer applikationen. Men så fejler API'en, når brugerne bruger appen.

Dette kan være en super irriterende situation at stå i, for ikke at sige dyrt for en virksomhed. Det er grunden til, at softwareudviklere udfører en række tests på softwaresystemer for at sikre, at de fungerer som forventet. API'er er ikke anderledes. Før udrulning skal du som minimum udføre præstationstests og sikkerhedstests.

Ydeevnetest kan grupperes i funktionalitetstest og belastningstest. Funktionalitetstest er det, du normalt bruger Postman eller Insomnia til. De sikrer, at din API fungerer som du forventer. Belastningstest er på den anden side mere optaget af, hvordan din API klarer sig med brug i den virkelige verden og spidsbelastning, og det er det, denne artikel handler om. Lad os se på belastningstests mere detaljeret.

Hvad er API-belastningstest?

API-belastningstestning er en type test, som udviklere bruger til at simulere normal- og spidsbelastning på slutpunkter. Denne form for test giver udviklere mulighed for at evaluere en API's ydeevne i den virkelige verden, før den implementeres. Det hjælper dem med at identificere den maksimale driftskapacitet af et system, eventuelle flaskehalse og ydeevneforringelse. API-belastningstest udføres normalt ved at oprette virtuelle brugere og derefter bruge dem til at teste API'ens funktionalitet samtidigt. 

API-belastningstest måler metrics som responstid, samtidige brugere, gennemløbshastigheder, ressourceudnyttelsesniveauer, Mean Time Between Failure (MTBF), Mean Time To Failure (MTTF) og så videre. Alle disse målinger kan bruges til at bestemme, hvor godt API'en klarer sig.

Typer af belastningstest

Der er flere typer af belastningstest, hver med sine anvendelsestilfælde. Lad os tage et kig på nogle af dem.

Belastningstest: Dette er den grundlæggende form for en belastningstest. Det bruges til at evaluere ydeevnen af ​​et system (i dette tilfælde en API) under normal belastning og forventet spidsbelastning.

Stresstest: Dette bruges til at evaluere ydeevnen af ​​et system under en meget tung belastning. Målet med denne test er at se, om et system genopretter sig efter fejl, og hvor lang tid det tager at gøre det. Belastningen øges normalt langsomt, indtil den overstiger systemets muligheder.

Spike test: Dette minder lidt om stresstestning, bortset fra at tung belastning påføres pludseligt, i modsætning til langsomt at rampe op. Denne form for test repræsenterer, hvad der sker, når der er en pludselig stigning i dit gennemsnitlige antal brugere eller besøgende, eller når der er et DDOS-angreb på dit system.

Soak test: Denne test er i modsætning til de andre ovenfor. Det sætter dit system under 80 % (eller deromkring) af normal belastning og lader det køre i en længere periode, f.eks. 12 til 14 timer. Denne form for test bestemmer, hvor pålideligt et system er over tid.

Indlæs Test af dine API'er med Locust

Udviklere har adgang til en række muligheder for belastningsteste deres API'er. Nogle almindelige belastningstestværktøjer er Gatling, JMeter og Locust. Vi vil fokusere på Locust i denne artikel.

Locust er et python-baseret open source-belastningstestværktøj, der bruges af topvirksomheder som Google, Microsoft og Riot Games til at teste deres API'er. I denne artikel vil vi demonstrere, hvordan man indlæser test en API. 

Til denne vejledning vil jeg oprette en simpel API med Flask. Du kan følge med mig eller bare oprette din API med Node, eller hvilken som helst ramme du er komfortabel med.

Krav

Python 3

Opsætning og installation

Først skal du opsætte et virtuelt miljø på din pc, så du ikke ødelægger dit globale Python-miljø. For at gøre det skal du køre følgende kommandoer. Bemærk, at disse kommandoer gælder for en Windows-terminal.

$ mkdir projekt

$ cd /d sti\til\projekt

$ python -m venv venv

$ venv\Scripts\aktiver

 

Først oprettede vi en projekt vejviser. Så ændrede vi vores nuværende mappe til projekt. Vi oprettede og aktiverede derefter et virtuelt miljø for Python inde i den mappe. 

Nu går vi videre til installationen Flask(vi vil bruge det til at oprette de endepunkter, der skal belastningstestes) og Locust Selv. 

 

Kør for at installere Flask. Sørg for, at du er i projekt hvor du har oprettet et virtuelt miljø.

$ pip installationskolbe

 

Kør for at installere Locust

$ pip installere græshoppe

 

Når det er gjort, skal du skrive følgende kommandoer. Sørg for, at du er i din projekt mappe, når du gør dette.

$ kopi nul __init__.py

$ mkdir app

$ kopi nul app\app.py

$ copy nul app\__init__.py

 

Denne kommando opretter nogle filer, som vi vil bruge til at oprette vores endepunkter ved hjælp af Flask. Du kan forresten også oprette disse filer ved hjælp af din filstifinder. Men hvad er det sjove i det? Når du har gjort det, skal du kopiere nedenstående kode ind app.py

fra kolbe import Flask, jsonify, request

app = Flask(__navn__)

bilmodeller = [

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

]

 

flymodeller = [

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

]

 

@app.route('/biler')

def get_cars():

  returner jsonify(car_models)

@app.route('/planes')

def get_planes():

  returner jsonify(plane_models)

hvis __navn__ == '__main__':

    app.run(debug=True)  

 

Ovenstående kode indeholder en metode få_biler bruges til at få en liste over bilmærker og deres modeller, og get_planes bruges til at få en liste over flymærker og deres modeller. For at vi kan indlæse teste dette slutpunkt, skal vi køre app.py. For at gøre det skal du køre nedenstående kommando.

$ python-sti\to\app.py

Når du har kørt det, skulle du se noget som dette:

API-belastningstest 1

Hvis du kopierer URL'en fra terminalen og skriver biler or fly efter / bør du kunne se dataene der. Vores mål er dog at teste slutpunktet med græshoppe, ikke med browseren. Så lad os gøre det. Kør følgende kommando i roden af ​​din projekt mappe.

 

$ kopi nul locust_test.py

 

Dette opretter en 'locust_test.py'-fil i roden af ​​din projekt vejviser. Når du har gjort det, skal du åbne filen og indsætte nedenstående kode. Vi vil forklare det om lidt.

 

importtid

fra græshoppe import HttpUser, opgave, mellem

 

klasse Brugeradfærd(HttpBruger):

    ventetid = mellem(5, 10)

 

    @opgave

    def get_cars(selv):

        self.client.get('/cars')

    

    @opgave

    def get_planes(selv):

        self.client.get('/planes')

 

Dette er et grundlæggende eksempel på brug af Locust til at indlæse teste en API. Først opretter vi en klasse Brugeradfærd, som kan gives et hvilket som helst passende navn, men skal forlænges HttpBruger. HttpBruger er klassen, der tager sig af at instansiere flere virtuelle brugere til at udføre de opgaver, vi specificerer i Brugeradfærd klasse. 

En opgave specificeres ved at dekorere en metode med @opgave dekoratør. Vi har også en funktion kaldet mellem() der giver os mulighed for at angive et interval af sekunder, vi skal vente på, før vi udfører den næste opgave. Du kan se, at vi har tildelt et interval på 5 til 10 sekunder for det i vores kode. 

For at køre koden skal du sørge for, at du stadig er i dit virtuelle miljø. Hvis den, du oprettede, bliver brugt af serveren, der betjener API'en, skal du åbne en ny terminal, ændre din mappe til din projekt mappe, og aktiver det virtuelle miljø, du har oprettet. Du kan finde kommandoen til aktivering af et virtuelt miljø ovenfor. Indtast nu nedenstående kommando i din terminal.

 

$ locust -f locust_test.py

 

Du skal se noget som dette:

API-belastningstest 2

Som standard er locusts webgrænseflade placeret på http://localhost/8089. Hvis du besøger webstedet, bør du se en grænseflade som denne:

API-belastningstest 3

Fra grænsefladen kan vi angive antallet af brugere, spawn rate (brugere oprettet pr. sekund) og vært. Du kan få adressen på din vært ved at tjekke den terminal, hvor serveren kører. I vores tilfælde er det ved port 5000. Når du klikker på Begynd at sværme, du vil blive præsenteret for grænsefladen nedenfor.

API-belastningstest 4

Dette viser dig forskellige nyttige målinger såsom antallet af mislykkede anmodninger, gennemsnitlig tid for en anmodning, minimumstiden for en anmodning, anmodninger pr. sekund, og så videre. Når du er tilfreds med det, du ser, kan du klikke på stop-knappen. 


Udover Statistik fane, er der en Diagrammer fane, der viser mere oplysninger i form af en graf, som billedet nedenfor.

Der er en grafen i alt forespørgsler pr. sekund, responstid graf, , antal brugere graf, alt sammen plottet mod tiden. Ved hjælp af graferne kan du bestemme, hvor mange brugere der er acceptable for en fast responstid, eller du kan observere dine diagrammer for en konstant responstid på trods af et stigende antal brugere og andre indsigter som den. Hvis du vil dele disse statistik med en anden, kan du downloade en rapport fra Download data fane.

At konkludere...

Belastningstestning af din API er en afgørende aktivitet i din udviklingsproces, så sørg for, at den er indarbejdet i din designcyklus. Du kan i øvrigt også udføre andre belastningstesttyper ved at variere værdierne for antallet af brugere og spawn rate. 

Hvis du vil lave en spidstest, skal du angive en stor værdi (f.eks. 2000) for antallet af brugere, og derefter en lige så stor værdi for din spawn-rate (f.eks. 500). Det betyder, at du på 4 sekunder vil have alle 2000 brugere oprettet og få adgang til dine slutpunkter. En stresstest vil være ens, men med en meget lavere værdi for spawn rate. For at finde ud af alt, hvad du kan gøre, tjek Locust dokumentation

Omgåelse af TOR-censur

Omgå internetcensur med TOR

Omgå internetcensur med TOR Introduktion I en verden, hvor adgang til information i stigende grad reguleres, er værktøjer som Tor-netværket blevet afgørende for

Læs mere »