Test de charge acridienne
REF
[1] - Locust document
J'écrirai en japonais au début. Je vous remercie!
Les criquets peuvent résoudre tous ces problèmes. (Voix mystérieuse: test de charge idéale, Locust)
Dans Locust, vous pouvez définir le nombre d'utilisateurs (clients), la fréquence et la manière dont les demandes sont envoyées. Ensuite, vous pouvez afficher le nombre de requêtes par seconde au moment de l'exécution, le nombre de fois que chaque requête est envoyée, le ResponseTime moyen / maximum / minimum et la requête ayant échoué.
L'installation avec pip et easy_install est le moyen le plus simple:
pip install locustio
easy_install locustio
Veuillez consulter ici pour savoir comment installer Windows et Mac.
Les tests de charge avec Locust sont faciles. Tout ce dont vous avez besoin pour lancer un test de charge est un TestCase python. Le scénario de test de Locust est également facile à écrire. Voici l'un des exemples typiques:
SimpleTask.py
from locust import HttpLocust, TaskSet, task
#Avant le vrai cas de test, préparez les matériaux pour le test
textureDirName = "texture"
userIdFileName = "user_id.txt"
userIdFilePath = os.path.join(os.path.abspath(os.path.dirname(__file__)), textureDirName, userIdFileName)
globalUserArr = list(line.rstrip('\n') for line in open(playerIdFilePath))
class SimpleTaskSet(TaskSet):
#Méthode à invoquer lors du démarrage du test
def on_start(self):
randomIndex = random.randint(0, len(globalUserArr) - 1)
self.testingUserId = globalUserArr[randomIndex]
# test case 1
@task(1)
def testRequestGet(self):
#Créer la partie chemin de l'url
requestPath = "/services/users/" + self.testingUserId + "/checkSomeThing"
#Envoyer une demande
self.client.get(requestPath)
# test case 2
# @task(2)Spécifie que ce scénario de test sera envoyé deux fois plus souvent que le scénario de test 1 ci-dessus.
@task(2)
def testRequestPost(self):
requestPath = "/services/users/doSomeThing/checkin"
#Comment lire une demande de publication
self.client.post(requestPath, {"user": self.testingUserId })
#Classe acridienne
class SimpleLocust(HttpLocust):
task_set = ReadStateTaskSet #Importez le cas de test ci-dessus
#Définition du nombre de secondes que chaque utilisateur doit attendre après l'envoi de la demande précédente
min_wait = int(1)
max_wait = int(2)
Il y a une mise en garde. Je pense qu'il vaut mieux ne pas avoir de membres comme * List * et * Dict * dans le TaskSet.
Et
python -H [you_url_or_ip_of_your_application] -f [path_of_your_SimpleTask]
Vous pouvez visiter la console de test de charge au port 8089 sur l'hôte local en exécutant. Ensuite, la charge est définie et le test est lancé.
Avec Locust, les tests de charge distribuée sont faciles.
Tout d'abord, préparez plusieurs serveurs, puis téléchargez le script ci-dessus sur le serveur.
Un serveur est responsable de ** Master ** et l'autre serveur est ** Slave **. La charge définie par ** Master ** est distribuée à ** Slave **, et ** Slave ** envoie la requête.
En maître:
python -H [you_url_or_ip_of_your_application] -f [path_of_your_simple] --master
Avec esclave:
python -H [you_url_or_ip_of_your_application] -f [path_of_your_simple] --slave --master-port=[master_ip]
Il y a trois points à noter lors d'un test de charge répartie:
- Comme il existe une communication entre le maître et l'esclave, vous devez définir le pare-feu et le groupe de sécurité.
- Si vous testez une charge lourde, de nombreux fichiers s'ouvriront en même temps en raison de HealthCheck, etc., de sorte qu'il peut dépasser Ulimit. Ainsi, sur chaque serveur maître et esclave, lancez d'abord ʻulimit 4096` avant de démarrer Locust.
- Si vous voulez changer le port 8089 par défaut, ajoutez
--master-bind-port = 5557
dans Master et ajoutez--master-port = 5557
dans Slave.