[PYTHON] Locust-Load-Test

Locust-Load-Test

REF

[1] - Locust document


Ich werde am Anfang auf Japanisch schreiben. Vielen Dank!


Schwierigkeit des Belastungstests

Locust kann all diese Probleme lösen. (Geheimnisvolle Stimme: idealer Belastungstest, Locust)

Grundfunktionen von Locust

In Locust können Sie festlegen, wie viele Benutzer (Clients), wie oft und wie Anforderungen gesendet werden. Anschließend können Sie die aktuelle Anzahl von Anforderungen pro Sekunde bei der Ausführung, die Häufigkeit, mit der jede Anforderung gesendet wird, die durchschnittliche / maximale / minimale Antwortzeit und die fehlgeschlagene Anforderung anzeigen.

Installieren Sie Locust

Die Installation mit pip und easy_install ist der einfachste Weg:

pip install locustio
easy_install locustio

Informationen zur Installation von Windows und Mac finden Sie unter hier.

Starten Sie Locust

Lasttests mit Locust sind einfach. Alles, was Sie zum Starten eines Auslastungstests benötigen, ist ein Python-TestCase. Der Testfall von Locust ist auch einfach zu schreiben. Das Folgende ist eines der typischen Beispiele:

SimpleTask.py


from locust import HttpLocust, TaskSet, task

#Bereiten Sie vor dem eigentlichen Testfall die Materialien für den Test vor
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):

  #Methode zum Aufrufen beim Starten des Tests
  def on_start(self):
    randomIndex = random.randint(0, len(globalUserArr) - 1)
    self.testingUserId = globalUserArr[randomIndex]

  # test case 1
  @task(1)
  def testRequestGet(self):
    #Erstellen Sie den Pfadteil der URL
    requestPath = "/services/users/" + self.testingUserId + "/checkSomeThing"
    #Anfrage senden
    self.client.get(requestPath)
    
  # test case 2
  # @task(2)Gibt an, dass dieser Testfall doppelt so oft gesendet wird wie Testfall 1 oben.
  @task(2)
  def testRequestPost(self):
    requestPath = "/services/users/doSomeThing/checkin"
    #Wie lese ich Post Anfrage
    self.client.post(requestPath, {"user": self.testingUserId })

#Heuschreckenklasse
class SimpleLocust(HttpLocust):
  task_set = ReadStateTaskSet #Importieren Sie den obigen Testfall
  #Festlegen, wie viele Sekunden jeder Benutzer nach dem Senden der vorherigen Anforderung warten soll
  min_wait = int(1) 
  max_wait = int(2) 

Es gibt eine Einschränkung. Ich denke, es ist besser, keine Mitglieder wie * List * und * Dict * im TaskSet zu haben.

Und

python -H [you_url_or_ip_of_your_application] -f [path_of_your_SimpleTask]

Sie können die Auslastungstestkonsole am 8089-Port auf dem Localhost durch Ausführen aufrufen. Dann wird die Last eingestellt und der Test gestartet.

Verteilter Belastungstest

Mit Locust ist das Testen verteilter Lasten einfach.

Bereiten Sie zuerst mehrere Server vor und laden Sie dann das obige Skript auf den Server hoch.

Ein Server ist für ** Master ** verantwortlich und der andere Server ist ** Slave **. Die von ** Master ** festgelegte Last wird an ** Slave ** verteilt, und ** Slave ** sendet die Anforderung.

Im Meister:

python -H [you_url_or_ip_of_your_application] -f [path_of_your_simple] --master

Mit Sklave:

python -H [you_url_or_ip_of_your_application] -f [path_of_your_simple] --slave --master-port=[master_ip]

Bei der Durchführung eines Tests mit verteilter Last sind drei Punkte zu beachten:

  1. Da zwischen Master und Slave eine Kommunikation besteht, müssen Sie Firewall und Sicherheitsgruppe festlegen.
  2. Wenn Sie eine schwere Last testen, werden aufgrund von HealthCheck usw. viele Dateien gleichzeitig geöffnet, sodass Ulimit möglicherweise überschritten wird. Führen Sie daher auf jedem Master- und Slave-Server zuerst "ulimit 4096" aus, bevor Sie Locust starten.
  3. Wenn Sie den Standard-8089-Port ändern möchten, fügen Sie im Master --master-bind-port = 5557 und im Slave --master-port = 5557 hinzu.

Recommended Posts

Locust-Load-Test
Prüfung
Django-Test
Post-Test
Über den Test
Numpy Unit Test
Verteilung und Test
Python-Integritätstest