[PYTHON] Test de charge acridienne

Test de charge acridienne

REF

[1] - Locust document


J'écrirai en japonais au début. Je vous remercie!


Difficulté du test de charge

Les criquets peuvent résoudre tous ces problèmes. (Voix mystérieuse: test de charge idéale, Locust)

Fonctions de base de 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é.

Installer Locust

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.

Démarrer le criquet

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é.

Test de charge distribuée

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:

  1. 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é.
  2. 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.
  3. Si vous voulez changer le port 8089 par défaut, ajoutez --master-bind-port = 5557 dans Master et ajoutez --master-port = 5557 dans Slave.

Recommended Posts

Test de charge acridienne
tester
Test Django
Post test
À propos du test
test unitaire numpy
Distribution et test
Test d'intégrité Python