Testez la montée en charge de votre serveur avec Locust
Si vous voulez tester la résistance de votre serveur et l’évolution de ses performances lors d’une augmentation du trafic, rien de mieux qu’un outil de test de montée en charge.
Et c’est pourquoi je vous présente aujourd’hui Locust.
Locust est un outil de test de charge facile à utiliser qui vous permet d’écrire et de jouer des scénarios de test en Python. Ainsi, avec un peu de code, vous pouvez simuler des comportements utilisateurs, qui bouclent ou qui prennent des chemins conditionnels différents.
Locust est également distribué, ce qui signifie que vous pouvez lancer des tests de charges répartis sur plusieurs machines, ce qui permet de simuler des milliers d’utilisateurs simultanés.
Ce qui est sympa également, c’est que Locust possède une interface graphique qui vous affichera la progression de votre test en temps réel. Vous pourrez même modifier la charge pendant l’exécution du test et comme il peut également fonctionner en ligne de commandes, vous pouvez l’intégrer à vos process CI/CD.
Ne pensez pas non plus que Locust soit uniquement dédié à du test de site web. En écrivant un client spécifique, vous pourrez ainsi tester d’autres systèmes ou protocoles.
Pour installer Locust, il vous faudra Python >= 3.6 et lancer la commande suivante :
pip3 install locust
Vous aurez également besoin d’écrire un premier scénario de test. Voici un exemple :
import time from locust import HttpUser, task, between class QuickstartUser(HttpUser): wait_time = between(1, 2.5) @task def hello_world(self): self.client.get("/hello") self.client.get("/world") @task(3) def view_items(self): for item_id in range(10): self.client.get(f"/item?id={item_id}", name="/item") time.sleep(1) def on_start(self): self.client.post("/login", json={"username":"foo", "password":"bar"})
Si vous regardez le code, vous pouvez voir qu’il y a 2 @task.
Ce sont les tâches qui seront effectuées par les utilisateurs simulés. Lorsque le QuickstartUser s’exécutera, il choisira au hasard l’une des tâches déclarées. Notez que la @task(3) a une pondération plus élevée, donc il y a 3 fois plus de chances que ce soit celle-ci qui soit choisie.
Ensuite, le reste n’est qu’une histoire de post et de get sur différents endpoints de votre site.
Bref, sauvegardez ce script sous la nom de fichier :
locustfile.py
Puis lancez locust :
locust -f locustfile.py
L’outil se lancera et vous donnera une URL à laquelle accéder avec votre ordinateur. Ensuite y’a plus qu’à mettre vos paramètres et à lancer le test.
Le test commencera alors en vrai. J’espère que votre serveur tiendra le coup :)
Et vous pourrez voir de beaux graphiques en temps réel, les erreurs rencontrées et bien sûr récupérer toutes les données pour les exploiter ensuite dans d’autres outils.
Locust est distribué sous licence libre et vous pouvez trouver son code en vous rendant sur le github.
Je vous invite également à lire la documentation ici.