Fastapi-Stresstest
Heuschrecke Python
Skalierbarkeitstests sind ein wichtiger Bestandteil, um die Webdienstproduktion vorzubereiten. Es gibt viele Tools für Lasttests, wie Gatling, Apache JMeter, The Grinder, Tsung und andere. Es gibt auch einen (und meinen Favoriten), der in Python geschrieben und auf der Requests- Bibliothek aufgebaut ist: Locust .
Wie es auf der Locust-Website bemerkt wird:
Ein grundlegendes Merkmal von Locust ist, dass Sie Ihren gesamten Test in Python-Code beschreiben. Keine Notwendigkeit für klobige Benutzeroberflächen oder aufgeblähtes XML, nur einfacher Code.
Heuschrecken-Installation
Das Leistungstest-Python-Modul Locust ist auf PyPI verfügbar und kann über pip oder easy_install installiert werden.
pip install locustio or: easy_install locust
Beispiel locustfile.py
Erstellen Sie dann locustfile.py nach dem Beispiel aus docs. Um das Django-Projekt zu testen, musste ich einige Header für csrftoken-Unterstützung und Ajax-Anfragen hinzufügen. Final locustfile.py könnte etwa so aussehen:
# locustfile.py
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
self.login()
def login(self):
# GET login page to get csrftoken from it
response = self.client.get('/accounts/login/')
csrftoken = response.cookies['csrftoken']
# POST to login page with csrftoken
self.client.post('/accounts/login/',
{'username': 'username', 'password': 'P455w0rd'},
headers={'X-CSRFToken': csrftoken})
@task(1)
def index(self):
self.client.get('/')
@task(2)
def heavy_url(self):
self.client.get('/heavy_url/')
@task(2)
def another_heavy_ajax_url(self):
# ajax GET
self.client.get('/another_heavy_ajax_url/',
headers={'X-Requested-With': 'XMLHttpRequest'})
class WebsiteUser(HttpLocust):
task_set = UserBehavior
Um Locust mit der obigen Python-Locust-Datei auszuführen, könnten wir (im selben Verzeichnis wie locustfile.py ) ausführen, wenn sie locustfile.py heißt:
locust --host=http://example.com
Wenn die Python-Lasttest-App Locust gestartet wird, sollten Sie sie besuchenhttp://127.0.0.1:8089/und dort finden Sie die Webschnittstelle unserer Locust-Instanz. Geben Sie dann die Anzahl der zu simulierenden Benutzer (z. B. 300) und die Schlupfrate (gelaichte Benutzer/Sekunde) (z. B. 10) ein und drücken Sie Start swarming . Danach beginnt Locust, Benutzer zu „schlüpfen“, und Sie können die Ergebnisse in der Tabelle sehen.
Python-Datenvisualisierung
Also, die Tabelle ist schön, aber wir würden es vorziehen, die Ergebnisse in einer Grafik zu sehen. Es gibt ein Problem , bei dem Leute darum bitten, Locust eine grafische Oberfläche hinzuzufügen, und es gibt mehrere Vorschläge, wie Diagramme für Locust-Daten angezeigt werden können. Ich habe mich entschieden, die interaktive Python-Visualisierungsbibliothek Bokeh zu verwenden .
Es ist einfach, die Python-Grafikbibliothek Bokeh von PyPI mit pip zu installieren:
pip install bokeh
Hier ist ein Beispiel für den Betrieb des Bokeh-Servers.
Wir können Locust-Daten im JSON-Format abrufenhttp://localhost:8089/stats/requests. Daten sollten in etwa so sein:
{
"errors": [],
"stats": [
{
"median_response_time": 350,
"min_response_time": 311,
"current_rps": 0.0,
"name": "/",
"num_failures": 0,
"max_response_time": 806,
"avg_content_length": 17611,
"avg_response_time": 488.3333333333333,
"method": "GET",
"num_requests": 9
},
{
"median_response_time": 350,
"min_response_time": 311,
"current_rps": 0.0,
"name": "Total",
"num_failures": 0,
"max_response_time": 806,
"avg_content_length": 17611,
"avg_response_time": 488.3333333333333,
"method": null,
"num_requests": 9
}
],
"fail_ratio": 0.0,
"slave_count": 2,
"state": "stopped",
"user_count": 0,
"total_rps": 0.0
}
Alle zusammen laufen
Unser Locust läuft also (wenn nein, starte es mit locust --host=http://example.com) und jetzt sollten wir Bokehservermit beginnen bokeh serveund dann unsere plotter.py mit ausführen python plotter.py. Wie unsere Skriptaufrufe zeigen , wird automatisch ein Browser-Tab mit der richtigen URL geöffnet, um das Dokument anzuzeigen.
Wenn Locust den Test bereits durchführt, sehen Sie die Ergebnisse sofort in Diagrammen. Andernfalls starten Sie einen neuen Test umhttp://localhost:8089/und kehren Sie zum Bokeh-Tab zurück und sehen Sie sich die Testergebnisse in Echtzeit an.
Das ist es. Den gesamten Code finden Sie auf github . Sie können ihn gerne klonen und das Beispiel ausführen.
git clone https://github.com/steelkiwi/locust-bokeh-load-test.git
cd locust-bokeh-load-test
pip install -r requirements.txt
locust --host=<place here link to your site>
bokeh serve
python plotter.py

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































