Tests de résistance Fastapi

Python criquet
Les tests d'évolutivité sont une partie importante de la préparation de la production de services Web. Il existe de nombreux outils de test de charge, comme Gatling, Apache JMeter, The Grinder, Tsung et autres. Il y en a aussi un (et mon préféré) écrit en Python et construit sur la bibliothèque Requests : Locust .
Comme on le remarque sur le site Web de Locust :
Une caractéristique fondamentale de Locust est que vous décrivez tous vos tests en code Python. Pas besoin d'interfaces utilisateur maladroites ou de XML gonflé, juste du code simple.
Installation de criquets
Le module python de test de performances Locust est disponible sur PyPI et peut être installé via pip ou easy_install.
pip install locustio or: easy_install locust
Exemple locustfile.py
Créez ensuite locustfile.py en suivant l' exemple de docs. Pour tester le projet Django, j'ai dû ajouter des en-têtes pour le support csrftoken et les requêtes ajax. Final locustfile.py pourrait ressembler à ceci :
# 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
Pour exécuter Locust avec le fichier locust python ci-dessus, s'il était nommé locustfile.py , nous pourrions exécuter (dans le même répertoire que locustfile.py ):
locust --host=http://example.com
Lorsque l'application de test de charge python Locust est lancée, vous devez visiterhttp://127.0.0.1:8089/et vous y trouverez l'interface Web de notre instance Locust. Entrez ensuite le nombre d'utilisateurs à simuler (par exemple 300) et le taux d'éclosion (utilisateurs engendrés/seconde) (par exemple 10) et appuyez sur Start swarming . Après cela, Locust commencera à "éclore" les utilisateurs et vous pourrez voir les résultats dans le tableau.
Visualisation de données Python
Donc, le tableau est sympa, mais nous préférerions voir les résultats sur un graphique. Il y a un problème dans lequel les gens demandent d'ajouter une interface graphique à Locust et il y a plusieurs propositions sur la façon d'afficher des graphiques pour les données Locust. J'ai décidé d'utiliser la bibliothèque de visualisation interactive Python Bokeh .
Il est facile d'installer la bibliothèque graphique python Bokeh de PyPI en utilisant pip :
pip install bokeh
Voici un exemple d'exécution du serveur Bokeh.
Nous pouvons obtenir des données Locust au format JSON en visitanthttp://localhost:8089/stats/requests. Les données devraient ressembler à ceci :
{
"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
}
Courir tous ensemble
Donc, notre Locust est en cours d'exécution (si non, démarrez-le avec locust --host=http://example.com
) et maintenant nous devrions commencer Bokehserver
avec bokeh serve
puis exécuter notre plotter.py avec python plotter.py
. Comme le montrent nos appels de script , un onglet de navigateur est automatiquement ouvert à l'URL correcte pour afficher le document.
Si Locust exécute déjà le test, vous verrez immédiatement les résultats sur des graphiques. Sinon commencer un nouveau test àhttp://localhost:8089/et revenez à l'onglet Bokeh et regardez les résultats des tests en temps réel.
C'est ça. Vous pouvez trouver l'intégralité du code sur github . N'hésitez pas à le cloner et à exécuter l'exemple.
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