API-Lasttests mit Locust

API-Lasttests mit Locust

API-Lasttests mit Locust: Einführung

Sie waren wahrscheinlich schon einmal in dieser Situation: Sie schreiben Code, der etwas tut, zum Beispiel einen Endpunkt. Sie testen Ihren Endpunkt mit Postman oder Insomnia, und alles funktioniert einwandfrei. Sie geben den Endpunkt an den clientseitigen Entwickler weiter, der dann die API und stellt die Anwendung bereit. Aber dann schlägt die API fehl, wenn die Benutzer die App verwenden.

Dies kann eine sehr ärgerliche Situation sein, ganz zu schweigen von den Kosten für ein Unternehmen. Aus diesem Grund führen Softwareentwickler eine Vielzahl von Tests an Softwaresystemen durch, um sicherzustellen, dass sie wie erwartet funktionieren. APIs sind nicht anders. Vor der Bereitstellung sollten Sie zumindest Leistungstests und Sicherheitstests durchführen.

Leistungstests können in Funktionstests und Belastungstests eingeteilt werden. Funktionalitätstests sind das, wofür Sie normalerweise Postman oder Insomnia verwenden. Sie stellen sicher, dass Ihre API so funktioniert, wie Sie es erwarten. Belastungstests hingegen befassen sich mehr damit, wie sich Ihre API bei realer Nutzung und Spitzenlast verhält, und darum geht es in diesem Artikel. Sehen wir uns Lasttests genauer an.

Was ist API-Lasttest?

API-Lasttests sind eine Art von Tests, die Entwickler verwenden, um normale und Spitzenlasten auf Endpunkten zu simulieren. Diese Art von Tests ermöglicht es Entwicklern, die reale Leistung einer API zu bewerten, bevor sie bereitgestellt wird. Es hilft ihnen, die maximale Betriebskapazität eines Systems, etwaige Engpässe und Leistungseinbußen zu identifizieren. API-Lasttests werden normalerweise durchgeführt, indem virtuelle Benutzer erstellt und diese dann verwendet werden, um die Funktionalität der API gleichzeitig zu testen. 

API-Lasttests messen Metriken wie Reaktionszeit, gleichzeitige Benutzer, Durchsatzraten, Ressourcenauslastung, Mean Time Between Failure (MTBF), Mean Time To Failure (MTTF) und so weiter. Alle diese Metriken können verwendet werden, um festzustellen, wie gut die API funktioniert.

Arten von Belastungstests

Es gibt verschiedene Arten von Belastungstests mit jeweils eigenen Anwendungsfällen. Werfen wir einen Blick auf einige von ihnen.

Belastungstest: Dies ist die Grundform eines Belastungstests. Es wird verwendet, um die Leistung eines Systems (in diesem Fall einer API) unter normaler Last und erwarteter Spitzenlast zu bewerten.

Belastbarkeitstest: Dies wird verwendet, um die Leistung eines Systems unter sehr hoher Last zu bewerten. Das Ziel dieses Tests besteht darin, festzustellen, ob sich ein System nach einem Ausfall erholt und wie lange dies dauert. Die Last wird normalerweise langsam hochgefahren, bis sie die Fähigkeiten des Systems übersteigt.

Spike-Test: Dies ähnelt Stresstests ein wenig, außer dass eine hohe Last plötzlich angelegt wird, anstatt sie langsam hochzufahren. Diese Art von Test stellt dar, was passiert, wenn Ihre durchschnittliche Anzahl von Benutzern oder Besuchern plötzlich ansteigt oder wenn es einen DDOS-Angriff auf Ihr System gibt.

Soak-Test: Dieser Test unterscheidet sich von den anderen oben. Es setzt Ihr System unter 80% (oder ungefähr) der normalen Last und lässt es für einen längeren Zeitraum laufen, sagen wir 12 bis 14 Stunden. Diese Art von Test bestimmt, wie zuverlässig ein System im Laufe der Zeit ist.

Belastungstests Ihrer APIs mit Locust

Entwickler haben Zugriff auf eine Vielzahl von Optionen für Lasttests ihrer APIs. Einige gängige Lasttest-Tools sind Gatling, JMeter und Locust. Wir werden uns in diesem Artikel auf Locust konzentrieren.

Locust ist ein Python-basiertes Open-Source-Lasttesttool, das von führenden Unternehmen wie Google, Microsoft und Riot Games zum Testen ihrer APIs verwendet wird. In diesem Artikel zeigen wir Ihnen, wie Sie eine API laden. 

Für dieses Tutorial erstelle ich eine einfache API mit Flask. Sie können mir folgen oder einfach Ihre API mit Node oder einem anderen Framework erstellen, mit dem Sie vertraut sind.

Voraussetzungen:

Python 3

Einrichtung und Installation

Zunächst müssen Sie eine virtuelle Umgebung auf Ihrem PC einrichten, damit Sie Ihre globale Python-Umgebung nicht durcheinander bringen. Führen Sie dazu die folgenden Befehle aus. Beachten Sie, dass diese Befehle für ein Windows-Terminal gelten.

$ mkdir-Projekt

$ cd /d Pfad\zum\Projekt

$ python -m venv venv

$venv\Scripts\activate

 

Zuerst erstellten wir eine Projekt Verzeichnis. Dann haben wir unser aktuelles Verzeichnis in geändert Projekt. Wir haben dann eine virtuelle Umgebung für Python in diesem Verzeichnis erstellt und aktiviert. 

Jetzt werden wir mit der Installation fortfahren Flasche(Wir werden es verwenden, um die zu testenden Endpunkte zu erstellen) und Heuschrecke sich. 

 

Um Flask zu installieren, führen Sie es aus. Stellen Sie sicher, dass Sie in der sind Projekt wo Sie eine virtuelle Umgebung erstellt haben.

$ pip flask installieren

 

Um Locust zu installieren, führen Sie aus

$ pip Heuschrecken installieren

 

Sobald dies erledigt ist, geben Sie die folgenden Befehle ein. Stellen Sie sicher, dass Sie in Ihrem sind Projekt Verzeichnis, wenn Sie dies tun.

$ copy nul __init__.py

$ mkdir-App

$ kopiere nul app\app.py

$ kopiere nul app\__init__.py

 

Dieser Befehl erstellt einige Dateien, die wir verwenden, um unsere Endpunkte mit Flask zu erstellen. Sie können diese Dateien übrigens auch mit Ihrem Datei-Explorer erstellen. Aber was ist der Spaß daran? Sobald Sie das getan haben, kopieren Sie den folgenden Code in app.py.

aus Flask importieren Flask, jsonify, Anfrage

app = Flasche(__name__)

auto_modelle = [

  { 'Marke': 'Tesla', 'Modell': 'Modell S' }

]

 

plane_models = [

  { 'Marke': 'Boeing', 'Modell': '747' }

]

 

@app.route('/autos')

def get_cars():

  gib jsonify(car_models) zurück

@app.route('/planes')

def get_planes():

  gib jsonify(plane_models) zurück

if __name__ == '__main__':

    app.run(debug=True)  

 

Der obige Code enthält eine Methode get_cars verwendet, um eine Liste von Automarken und ihren Modellen zu erhalten, und get_planes verwendet, um eine Liste von Flugzeugmarken und ihren Modellen zu erhalten. Damit wir diesen Endpunkt testen können, müssen wir app.py ausführen. Führen Sie dazu den folgenden Befehl aus.

$ python-Pfad\zu\app.py

Sobald Sie das ausgeführt haben, sollten Sie so etwas sehen:

API-Lasttests 1

Wenn Sie die URL vom Terminal kopieren und eingeben Autos or Flugzeuge nach dem / sollten Sie die Daten dort sehen können. Unser Ziel ist es jedoch, den Endpunkt mit Locust zu testen, nicht mit dem Browser. Also lass uns das tun. Führen Sie den folgenden Befehl im Stammverzeichnis Ihrer Projekt Verzeichnis.

 

$ kopieren nul locust_test.py

 

Dadurch wird eine ‚locust_test.py‘-Datei im Stammverzeichnis Ihrer erstellt Projekt Verzeichnis. Sobald Sie das getan haben, öffnen Sie die Datei und fügen Sie den folgenden Code ein. Wir erklären es in Kürze.

 

Importzeit

von locust import HttpUser, task, between

 

Klasse UserBehaviour(HttpUser):

    Wartezeit = zwischen (5, 10)

 

    @Aufgabe

    def get_cars(selbst):

        self.client.get('/autos')

    

    @Aufgabe

    def get_planes(self):

        self.client.get('/planes')

 

Dies ist ein einfaches Beispiel für die Verwendung von Locust zum Testen einer API. Zuerst erstellen wir eine Klasse Benutzerverhalten, die einen beliebigen geeigneten Namen erhalten kann, aber erweitert werden muss HTTPBenutzer. HTTPBenutzer ist die Klasse, die sich um die Instanziierung mehrerer virtueller Benutzer kümmert, um die Aufgaben auszuführen, die wir in der angeben Benutzerverhalten Klasse. 

Eine Aufgabe wird spezifiziert, indem eine Methode mit dem dekoriert wird @Aufgabe Dekorateur. Wir haben auch eine Funktion namens zwischen() Dadurch können wir eine Zeitspanne in Sekunden angeben, die gewartet werden soll, bevor die nächste Aufgabe ausgeführt wird. Sie können sehen, dass wir dafür in unserem Code einen Bereich von 5 bis 10 Sekunden zugewiesen haben. 

Stellen Sie zum Ausführen des Codes sicher, dass Sie sich noch in Ihrer virtuellen Umgebung befinden. Wenn das von Ihnen erstellte von dem Server verwendet wird, der die API bereitstellt, öffnen Sie ein neues Terminal, ändern Sie Ihr Verzeichnis in Ihr Projekt Verzeichnis und aktivieren Sie die von Ihnen erstellte virtuelle Umgebung. Den Befehl zum Aktivieren einer virtuellen Umgebung finden Sie oben. Geben Sie nun den folgenden Befehl in Ihr Terminal ein.

 

$ locust -f locust_test.py

 

Sie sollten so etwas sehen:

API-Lasttests 2

Standardmäßig befindet sich die Weboberfläche von Locust unter http://localhost/8089. Wenn Sie die Website besuchen, sollten Sie eine Oberfläche wie diese sehen:

API-Lasttests 3

Über die Benutzeroberfläche können wir die Anzahl der Benutzer, die Spawn-Rate (pro Sekunde erstellte Benutzer) und den Host angeben. Sie können die Adresse Ihres Hosts erhalten, indem Sie das Terminal überprüfen, auf dem der Server läuft. In unserem Fall ist es Port 5000. Wenn Sie auf klicken Fang an zu schwärmen, Ihnen wird die unten stehende Benutzeroberfläche angezeigt.

API-Lasttests 4

Dies zeigt Ihnen verschiedene nützliche Metriken wie die Anzahl fehlgeschlagener Anfragen, die durchschnittliche Zeit für eine Anfrage, die Mindestzeit für eine Anfrage, Anfragen pro Sekunde und so weiter. Wenn Sie mit dem, was Sie sehen, zufrieden sind, können Sie auf die Stopp-Schaltfläche klicken. 


Neben dem Statistiken Registerkarte gibt es eine Charts Registerkarte, die mehr anzeigt Information in Form eines Diagramms, wie das Bild unten.

Da ist ein Diagramm Gesamtanfragen pro Sekunde, Reaktionszeitdiagramm, und Grafik zur Anzahl der Benutzer, alles gegen die Zeit aufgetragen. Anhand der Diagramme können Sie ermitteln, wie viele Benutzer für eine feste Antwortzeit akzeptabel sind, oder Sie können Ihre Diagramme für eine konstante Antwortzeit trotz steigender Benutzerzahlen und ähnliche Erkenntnisse beobachten. Wenn Sie diese teilen möchten Statistik mit jemand anderem können Sie einen Bericht von herunterladen Daten herunterladen Tab.

Schlussfolgern...

Belastungstests Ihrer API sind eine entscheidende Aktivität in Ihrem Entwicklungsprozess, stellen Sie also sicher, dass sie in Ihren Designzyklus integriert sind. Übrigens können Sie auch andere Belastungstesttypen durchführen, indem Sie die Werte für die Anzahl der Benutzer und die Spawnrate variieren. 

Wenn Sie einen Spike-Test durchführen möchten, geben Sie einen großen Wert (z. B. 2000) für die Anzahl der Benutzer und dann einen ebenso großen Wert für Ihre Spawn-Rate (z. B. 500) an. Das bedeutet, dass Sie in 4 Sekunden alle 2000 Benutzer erstellt haben und auf Ihre Endpunkte zugreifen. Ein Stresstest wird ähnlich sein, aber mit einem viel niedrigeren Wert für die Spawnrate. Um herauszufinden, was Sie alles tun können, sehen Sie sich die Heuschrecke an Dokumentation

Umgehung der TOR-Zensur

Mit TOR die Internet-Zensur umgehen

Umgehen der Internet-Zensur mit TOR Einführung In einer Welt, in der der Zugang zu Informationen zunehmend reguliert wird, sind Tools wie das Tor-Netzwerk von entscheidender Bedeutung geworden

Mehr lesen »