En coordonnant plusieurs processus dans l'outil de test de charge Python Locust, la parallélisation peut mettre une charge importante sur l'hôte testé. Dans cet article, je vais vous montrer comment faire cela avec une seule machine multicœur. L'interface utilisateur Web n'est pas utilisée. [^ 1]
Dans la documentation officielle, il est présenté sur la page ci-dessous.
[^ 1]: Comment utiliser l'interface utilisateur Web est présenté dans Préparation d'un environnement de test de charge distribué avec l'outil de test de charge Python Locust --Qiita Ça a été.
Dans ce qui suit, on suppose que l'environnement d'exécution de «locust» est prêt. [^ 2] De plus, je n'expliquerai pas comment écrire un fichier de localisation.
[^ 2]: Cliquez ici pour savoir comment installer locust: https://docs.locust.io/en/stable/installation.html
Créez simplement un script shell comme celui ci-dessous et exécutez-le.
run-locust-distributed.sh
#!/usr/bin/env bash
set -uc
#Créer un répertoire de destination de sortie de journal et de rapport
mkdir -p logs output
host=https://example.com #Tester l'hôte cible
locustfile=yourlocustfile.py
slave_num=8 #Nombre d'esclaves (nombre de parallèles)- 1)
master_port=5557
max_clients=200 #Nombre maximum de clients
duration=90m #Temps d'exécution total
step_clients=5 #Augmentation du nombre de clients/intervalle
step_interval=1m #intervalle
# master
taskset -c 0 locust -f $locustfile --no-web \
-c $max_clients -t $duration -H $host \
--master --expect-slaves $slave_num --master-bind-port $master_port \
--step-load --step-clients $step_clients --step-time $step_interval \
--logfile logs/locust.master.log -L WARNING --csv output/locust.master \
&> /dev/null &
# slaves
for no in $(seq 1 ${slave_num}); do
taskset -c $no locust -f $locustfile --no-web \
-c $max_clients -H $host \
--slave --master-host 127.0.0.1 --master-port $master_port \
--logfile logs/locust.slave$no.log -L WARNING --csv output/locust.slave$no \
&> /dev/null &
done
--Coopère avec le processus maître et plusieurs processus esclaves.
--expect-slaves = N
du côté maître, le test démarrera après avoir attendu le nombre spécifié d'esclaves pour se connecter. [^ 3]--step-load
est facultative. Veuillez l'utiliser lorsque vous souhaitez augmenter la charge étape par étape avec Step Load Mode.
--Avec l'option --csv
, divers indicateurs et journaux sont enregistrés au format CSV.-L
est le niveau de journalisation. Avec «INFO» par défaut, il y a de nombreuses parties où les informations se chevauchent avec CSV, donc je pense que «AVERTISSEMENT» est nécessaire et suffisant. Si vous regardez le journal, vous remarquerez qu'il y a un problème tel qu'un manque de ressources CPU.Si la ressource CPU de l'hôte d'exécution de locust est insuffisante, le journal suivant sera généré. Si un tel journal apparaît, il est possible que la charge attendue ne puisse pas être appliquée, il est donc préférable d'envisager une parallélisation avec une configuration maître-esclave ou une augmentation du nombre d'esclaves.
Pour un seul processus:
[2020-04-15 05:57:28,228] hostname/WARNING/root: Loadgen CPU usage above 90%! This may constrain your throughput and may even give inconsistent response time measurements! See https://docs.locust.io/en/stable/running-locust-distributed.html for how to distribute the load over multiple CPU cores or machines
Lors de l'exécution de manière distribuée dans une configuration maître-esclave:
#côté maître
[2020-04-15 07:41:01,928] hostname/WARNING/locust.runners: Slave hostname_886b86153c0c4a839a5dc35a190be166 exceeded cpu threshold (will only log this once per slave)
[2020-04-15 07:43:50,863] hostname/WARNING/locust.runners: CPU usage threshold was exceeded on slaves during the test!
#Le côté esclave est le même que dans le cas d'un seul processus, il est donc omis