Ich möchte die Anzahl der Threads für einen JMeter-Testplan zur Laufzeit ändern.
Ich habe mein Problem gegooglet und eine vorgeschlagene Lösung für die Verwendung von JMeter-Plugins gefunden. Aber in dieser Lösung müsste ich die Thread-Gruppe vor dem Ausführen des Testplans einplanen, was ich nicht möchte. Ich fand auch eine andere mögliche Lösung , die die Eigenschaft ändert, aber das Testplanverhalten zur Laufzeit nicht beeinflusst.
Letztlich versuche ich, die in einer Thread-Gruppe angegebene Thread-Nummer zu ändern und die Anzahl der Threads im aktuell laufenden Testplan sofort zu erhöhen oder zu verringern.
Ist das möglich?
Die kurze Antwort lautet: Nein, Sie können die Anzahl der Threads während der Laufzeit nicht dynamisch ändern. Jeder Thread-Zählwert wird nur einmal gelesen, wenn der Testplan zum ersten Mal kompiliert wird und nach diesem Punkt nicht mehr aufgelöst wird. Er bleibt also fest.
IMHO, das ist nur eine nette Funktion, die keinen wirklichen Nutzen hat, wenn Sie richtige Leistungstests durchführen. Um eine relevante Testausgabe (Report) zu generieren, benötigen Sie Wiederholbarkeit und klar definierte Testmethodiken und Szenarien. Um die Auswirkungen von Änderungen in der Anwendung / Server / Infrastruktur zu vergleichen, ist eine Wiederholbarkeit erforderlich.
Was meinst du mit
?Wir können den Benutzer unserer Seite nicht vorhersagen
Deshalb machen wir Leistungstests an erster Stelle. Um herauszufinden, was unser Limit für Anwendungen / Infrastruktur ist.
I.e. Die wichtigste Metrik, die Sie erstellen können, ist, wie sich die Antwortzeit Ihrer Anwendung ändert, wenn sich die Anzahl der parallelen Benutzer ändert. Aber nicht in der Laufzeit ändern sich unregelmäßig.
Mit der jMeter Plugins Ultimate Thread-Gruppe können Sie jedes erdenkliche Szenario abdecken.
Diese Funktion ist in der Tat nützlich und überraschend schwierig zu implementieren, selbst mit kommerziellen Tools wie Loadrunner. Ich würde es vergleichen mit dem Finden eines Lautsprechers maximale Lautstärke. Sie würden die Lautstärke manuell erhöhen, bis es anfängt zu knistern, und dann wieder leicht nach unten drehen, um die maximale Lautstärke zu erhalten. Um die maximale Kapazität einer Anwendung zu finden, sollten Sie die Lautstärke aufdrehen, bis Fehler angezeigt werden, und sie dann etwas zurückfahren, um zu sehen, ob sie sich stabilisiert. Sie können diese Last dann beibehalten, um den Engpass zu finden.
Wie auch immer, um die Frage zu beantworten, habe ich in der Vergangenheit einen externen Einfluss wie einen Dateinamen oder Ähnliches verwendet. Kombinieren Sie das dann mit der eindeutigen Threadreferenz, die Sie steuern können, welche Threads ausgeführt werden und welche angehalten werden (durch Pausieren oder Ähnliches).
Wenn Sie beispielsweise mit 100 Threads beginnen und dann eine Datei mit dem Namen "5.txt" an einem bestimmten Ort erstellen, können Sie Code hinzufügen, sodass, wenn die Threads sehen, der eigene Verweis gleich oder kleiner als die Nummer ist dann kann es laufen. Wenn nicht, dann fällt es in eine Pause. Am Anfang dieses Beispiels würden 5 Threads laufen und 95 würden pausieren. Sie können die Datei dann in '25 .txt 'umbenennen und die Threads 6 bis 25 beginnen zu laufen. Es würde auch anders funktionieren, wenn Sie es in '20 .txt 'ändern, würde dies bedeuten, dass die Threads 21-25 erneut anhalten.
Der Schlüssel ist, genug Threads zu starten, um den erwarteten Peak zu überschreiten.
Sie können es basierend auf einer Variablen ändern, die Sie in einem Startthread festlegen. Siehe unten.
In Jmeter wie setze ich eine variable Anzahl von Threads mit einer Beanshell Sampler-Variable?
Sobald die Thread-Gruppe jedoch gestartet wurde, können Sie sie nicht mehr ändern. Für den Typen, der diese Funktion nicht für nützlich hält, stimme ich nicht zu. Es gibt viele Arten von Belastungstests und sie haben nicht alle die gleiche Anzahl von Benutzern, die für die Dauer laufen. Hier sind nur zwei Beispiele für Lasttests, die wir in der Bank durchführen, in der ich arbeite:
Bei einem Breakpoint-Test wird die Anzahl der Nutzer erhöht, bis die Anwendung unterbrochen wird (der Punkt, an dem Sie sehen können, wie hoch Ihre App skalieren kann). Sie können dies mit der Eigenschaft "ramp up period" der Thread-Gruppen erledigen. Wenn Sie die Hochlaufzeit auf 1000 und die Anzahl der Threads auf 100 einstellen, wird alle 10 Sekunden ein Thread hinzugefügt.
Spike-Tests sind wie Dauertests, aber in einigen Intervallen meldet sich eine große Anzahl von Benutzern an. Dies wird verwendet, um die Antwortzeit der Anwendungen während der Stoßzeiten zu bestimmen oder wie sie reagieren wird, wenn Sie plötzlich eine große Anzahl von Benutzern erhalten (ein sehr reales Szenario).
Ich finde, dass Jmeter nicht alle Lasttestszenarios behandelt, die für die Belastungstests in Unternehmen benötigt werden. Ein Workaround, den ich in Betracht ziehe, ist, einfach alle Threads zu starten, aber einen Weg zu finden, um einige von ihnen schlafen zu lassen. Sie können also die Anzahl der Threads auf 1000 setzen, aber 980 von ihnen schlafen lassen oder nichts tun. Dann, wenn die time_in_seconds% 5 == 0 (alle 5 Minuten), erlauben Sie den anderen Threads zu laufen - Simulieren eines Spike-Tests. Die Idee ist, dass Sie die Threads fest auf 1000 programmieren können und immer 1000 Threads laufen lassen - aber sie müssen nicht immer etwas tun.
(mit anderen Worten, Sie können wahrscheinlich einen Weg finden, aber Sie müssen kreativ werden)
Aktualisierung: Ich habe gerade dieses Plugin gefunden, das verschiedene Arten von Tests erlaubt. Habe es noch nicht ausprobiert aber sieht vielversprechend aus: Ссылка
Sie können die Anzahl der Threads zur Laufzeit über die Befehlszeilenoption ... / p> festlegen / ändern
Sie können Funktionsaufrufe oder Variablenreferenzen auf Benutzerparameter verwenden (die wiederum Funktionen sein könnten), oder Variablenverweise auf Variablen, die durch Funktionen früher im Test eingerichtet wurden. Es gibt mehr als einen Weg, es zu tun.
Angenommen, Sie möchten die Anzahl der Threads in einem Testplan variieren können. Wählen Sie einen geeigneten Eigenschaftsnamen, sagen Sie group1.threads. Ersetzen Sie die Thread-Anzahl in der GUI (oder die JMX, wenn Sie sich mutig fühlen!) Mit dem folgenden Funktionsaufruf:
Bitte setzen Sie die Eigenschaft in der JMeter-Thread-Gruppe wie folgt $ {__ Eigenschaft (group1.threads)}
Definieren Sie dann beim Starten von JMeter die Eigenschaft in der Befehlszeile:
jmeter -Jgroup1.threads = 10
Wir können den Benutzer unserer Site nicht vorhersagen.
Sicher kannst du. Dies ist, wofür die HTTP-Protokolle Ihrer bestehenden Site sind. Sie können auch Protokolle von Tools wie Omniture oder Ihren CDN-Protokollen verwenden. Wenn Sie sich die Kombination der tatsächlichen Benutzer-IP-Adresse, Anfrage- und Referer-Tags in den Protokollen ansehen, können Sie eine Traversalkarte von jedem einzelnen Benutzer auf Ihrer Site erstellen. Sie werden in der Lage sein, die eindeutigen Seitenknoten eines bestimmten Geschäftsprozesses zu profilieren, um zu verstehen, wie oft ein bestimmter Geschäftsprozess eine Stunde dauert. Sie können die Aufgabe durch einen Blick auf den Trichter in Tools wie Omniture untersuchen. Wenn Sie Werkzeuge für diese Analyse benötigen, empfehle ich Splunk. Es ist einfach zu installieren und zu konfigurieren. Time to Value ist sehr schnell.
Je mehr Protokolldaten Sie verwenden, um das Profil zu erstellen, desto genauer können Sie sehen, was Nutzer während eines Tages / einer Woche / eines Monats / Spotverkaufs / Quartalsende / Ende des Jahres / etc tun. Sie müssen die tatsächliche Zeit zu einem Zeitpunkt mit tatsächlichen früheren Zeiträumen kombinieren, um das Wachstum im Laufe der Zeit zu prognostizieren, da Sie Wachstum in Ihrem Leistungstestmodell berücksichtigen müssen.
Wenn Sie die Werte nicht richtig erhalten, wird der Wert Ihres Tests als Prädiktor dafür, was in der Produktion passieren wird / kann, ziemlich niedrig sein. Hierbei handelt es sich nicht um einen Fehler eines bestimmten Werkzeugs, sondern um einen Fehler in der Planung des tatsächlichen Lastmodells, das als Teil der Testanforderungen verwendet wird. Wenn Sie diese Modelle nicht bauen können, müssen Sie jemanden in Ihr Team ziehen, der das kann.
Diese Fähigkeit, ein gültiges Lastmodell unabhängig vom Werkzeug zu erstellen, ist der Unterschied zwischen Tests, die das Risiko und die Wurflast reduzieren.
Tags und Links java jmeter load-testing