Locust-Load-Test
REF
[1] - Locust document
Ich werde am Anfang auf Japanisch schreiben. Vielen Dank!
Locust kann all diese Probleme lösen. (Geheimnisvolle Stimme: idealer Belastungstest, 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.
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.
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.
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:
- Da zwischen Master und Slave eine Kommunikation besteht, müssen Sie Firewall und Sicherheitsgruppe festlegen.
- 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.
- 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.