Guide de prise en main rapide de Locust

 

PRISE EN MAIN DE LOCUST

1.Présentation

Locust est un utilitaire open-source populaire pour tester la charge et mesurer la performance des applications web. Il permet de simuler plusieurs milliers d’utilisateurs virtuels concurrents and de générer des schémas de traffic réalistes.

Cet article fait suite au précédent sur k6 pour présenter les outils de test de charge.

2.Installation

Il est conseillé d’utiliser un environnement virtuel pour python afin d’installer facilement locust.

A. Installation de l’environnement virtuel de python

  • Sous Debian

    apt install python-virtualenv
  • Sous CentOs

    dnf install python-virtualenv

B. Activation et mise en place de l’environnement et installation de locust

Activation de l’environnement virtuel

virtualenv locustenv
source locustenv/bin/activate

Installation de locust

pip3 install locus

C. Lancement de locust

locust -f locustfile.py

D. Monitoring en temps réel

Dans le web browser

127.0.0.1:8089

Après avoir renseigné le site à tester, le nombre d’utilisateurs virtuels (VUs) et le temps d’attente entre le lancement du test de chaque utilisateur, l’interface graphique commence à remonter les information en temps réel.


Graphique sous l'interface de Locust


Résultats des requêtes

3.Paramétrages

Le paramétrage est assez simple à comprendre et mettre en place.

Les paramétrages dans le script :

  • la fonction on_start permet de lancer toutes les actions que l’on souhaite réaliser au lancement du script.

  • la fonction on_stop quant à elle lance les actions souhaitées lorsque sont stoppés les tests sur l’interface graphique

  • les différentes adresses à tester par le script...

Les paramétrages via l’interface web:
Les paramétrages via l’interface graphique sont plus limités pour une plus grande visibilité et surtout ils permettent des ajustements en cours de test.

  • Le site web de référence (ne peut être modifié durant les tests)

  • Le nombre d’’utilisateurs virtuels (VU)

  • Le délai d’attente au démarrage du test entre chaque utilisateur virtuel

4.Les options

Dans le script:

  • @task(n) est un décorateur qui permet de donner du poids à une fonction, par exemple lancer n fois la fonction 1 pour 1 fois la fonction 2

  • time sleep définit le temps théorique que passeraitun utilisateur pour consulter une page web.

  • between(1 ,5) définit un temps aléatoire entre 1 et 5 secondes

  • et d’autres...

5.Exemple de script

Dans ce script, plusieurs utilisateurs se connectent à la page de connexion et le succès de la connexion est vérifiée et un message sur la console CLI envoyé.

Le script peut-être complexifié avec des lignes de codes en python, permettant des scénarios beaucoup plus pointus et mieux ajustés aux besoins.

import time
from locust import HttpUser, TaskSet, task, between

USER_CREDENTIALS = [
    ("test1", "Pa$$w0rd2023"),
    ("test2", "Pa$$w0rd2023"),
    ("test3", "Pa$$w0rd2023"),
    ("test4", "Pa$$w0rd2023"),
    ("test5", "Pa$$w0rd2023"),
    ]

class UserBehavior(TaskSet):

    def on_start(self):
        self.login()

    def login(self):
        if len(USER_CREDENTIALS) >0:
            user, passw = USER_CREDENTIALS.pop()
            response = self.client.post('/login', json={'username': user, 'password': passw})
             if response.status_code == 200:
                print('[+]Connection to {user} succeeded')
            else:
                print('[-]Connection to {user} failed')
                print('[-]Error :', response.status_code)

    def on_stop(self):
        response = self.client.get('/logout')
        if response.status_code == 200:
            print('[+]Disconnection to {user} succeeded')
        else:
            print('[-]Disconnection to {user} failed')
            print('[-]Error :', response.status_code)

    @task(1)
    def view_page_root(self):
        self.client.get('/')
        time.sleep(5)

6.Les résultats

Les résultats apparaissent en direct sur l’interface web de l’application. Sur l’onglet erreur, apparaissent les échecs d’accès et les erreurs rencontrées.

Il est possible de récupérer toutes ces informations au format JSON pour les traiter ultérieurement par exemple sur Grafana.