wake-up-neo.com

Testen mit JMeter: Wie werden N Anfragen pro Sekunde ausgeführt?

Ich muss testen, ob unser System N Anfragen pro Sekunde ausführen kann. Technisch gesehen sind es zwei Anfragen an eine API, zwei Anfragen an eine andere und sechs Anfragen an Dritte. Aber das Wichtigste, dass sie gleichzeitig auftreten sollten - also 10 Anfragen pro Sekunde ... In JMeter habe ich drei Thread-Gruppen erstellt. Zuerst werden die Anzahl der Threads 1 und die Hochlaufzeit 0 .. definiert. Die zweite Thread-Gruppe ist dieselbe und die dritte Thread-Gruppe Definiert die Anzahl der Threads 6 und die Hochlaufzeit 0. .. Aber das garantiert nicht, dass sie pro Sekunde .__ ausgeführt werden. Wie kann ich das nachahmen? Und wie sehe ich die Ergebnisse - ob sie in der Lage waren oder nicht?

Vielen Dank! 

42
alexeypro

Wie bei jedem Netzwerktest gibt es immer Probleme, vor allem bei der Latenz - selbst wenn Sie könnten genau 6 pro Sekunde senden, werden sie nacheinander gesendet (so werden Pakete gesendet) und kann nicht alle Treffer in dieser Sekunde plus Bearbeitungszeit treffen.

Im Allgemeinen, wenn die Leistungskennzahlen für x pro Sekunde spezifisch sind, werden sie über einen bestimmten Zeitraum gemessen. Ihre API verfügt möglicherweise sogar über einen Puffer. Sie können also technisch 6 pro Sekunde senden, aber 5 pro Sekunde mit einem Puffer von 20 verarbeiten. Das bedeutet, dass der Datenverkehr für 20 Sekunden in Ordnung wäre, da Sie 120 gesendet hätten Die Verarbeitung dauert 120/5 = 24 Sekunden. Aber mehr als das würde den Puffer überlaufen lassen. Es ist also nicht ausreichend, genau 6 in einer Sekunde zu testen.

In der Thread-Gruppe haben Sie die richtige Anzahl der Threads (Benutzer) auf 6 festgelegt. Führen Sie dann die Schleife für immer aus (markieren Sie sie oder fügen Sie sie in eine while-Schleife ein) und fügen Sie einen Listener wie einen Aggregatbericht und eine Ergebnisstruktur hinzu. Die Ergebnisse, die Sie verwenden können, um zu überprüfen, ob das richtige Material gesendet und beantwortet wird (vorausgesetzt, Sie überprüfen die Antworten). Im zusammenfassenden Bericht können Sie sehen, wie viele Aktivitäten pro Stunde stattfinden (offensichtlich mit 3600 für Sekunden multiplizieren) Wegen dieser Ungenauigkeit ist es am besten, es für längere Zeit laufen zu lassen).

Der anfängliche Belastungstest kann jetzt ausgeführt werden. Als genauerer Test können Sie ihn länger laufen lassen (Einweichtest), um zu sehen, ob andere Probleme auftauchen - Pufferüberläufe, Speicherlecks oder andere unerwartete Ereignisse.

30
Mark Mayo

Sie könnten ConstantThroughputTimer verwenden.

Zitat aus JMeter-Hilfedateien unten:

18.6.4 Zeitgeber für konstanten Durchsatz Dieser Timer führt variable Pausen ein, die so berechnet werden, dass der Gesamtdurchsatz (in Stichproben pro Minute) so nahe wie möglich an einer gegebenen Zahl liegt. Natürlich ist der Durchsatz geringer, wenn der Server nicht in der Lage ist, den Server zu verarbeiten, oder wenn andere Zeitgeber oder zeitaufwendige Testelemente dies verhindern. N.B. Obwohl der Timer als Constant Throughput-Timer bezeichnet wird, muss der Durchsatzwert nicht konstant sein. Er kann in Form eines Variablen- oder Funktionsaufrufs definiert werden und der Wert kann während eines Tests geändert werden.

Zum Beispiel habe ich damit 40 Anfragen pro Sekunde generiert:

 <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="Constant Throughput Timer" enabled="true">
      <stringProp name="calcMode">all active threads in current thread group</stringProp>
      <doubleProp>
        <name>throughput</name>
        <value>2400.0</value>
        <savedValue>0.0</savedValue>
      </doubleProp>
    </ConstantThroughputTimer>

Und das ist eine Zusammenfassung:

Created the tree successfully using performance/search-performance.jmx
Starting the test @ Tue Mar 15 16:28:39 CET 2011 (1300202919244)
Waiting for possible shutdown message on port 4445
Generate Summary Results +  3247 in  80,3s =   40,4/s Avg:    18 Min:     0 Max:  1328 Err:   108 (3,33%)
Generate Summary Results +  7199 in 180,0s =   40,0/s Avg:    15 Min:     1 Max:  2071 Err:   378 (5,25%)
Generate Summary Results = 10446 in 260,3s =   40,1/s Avg:    16 Min:     0 Max:  2071 Err:   486 (4,65%)
Generate Summary Results +  7200 in 180,0s =   40,0/s Avg:    14 Min:     0 Max:   152 Err:   399 (5,54%)
Generate Summary Results = 17646 in 440,4s =   40,1/s Avg:    15 Min:     0 Max:  2071 Err:   885 (5,02%)
Generate Summary Results +  7199 in 180,0s =   40,0/s Avg:    14 Min:     0 Max:  1797 Err:   436 (6,06%)
Generate Summary Results = 24845 in 620,4s =   40,0/s Avg:    15 Min:     0 Max:  2071 Err:  1321 (5,32%)

Ich führe diesen Test jedoch in meinem Netzwerk aus.

58
lb_lb

Verwenden Sie den Throughput Shaping Timer

16
Andrey Pokhilko

Ich hatte ein ähnliches Problem und hier sind zwei Lösungen, die ich gefunden habe:

Lösung 1:
Sie können die Stepping-Thread-Gruppe (ermöglicht das Einstellen der Anzahl der Thread-Stufen über festgelegte Zeiträume) mit dem Constant-Throughput-Timer verwenden. Mit dem Durchsatz-Timer können Sie die Anzahl der Samples festlegen, die der Thread pro Minute senden kann (wenn Sie beispielsweise 1 festlegen, sendet der Thread nur eine Anforderung pro Minute). Sie können den Durchsatz-Timer auch auf alle Threads in Ihrer Thread-Gruppe anwenden oder für jeden Thread einen Timer mit eigenen Einstellungen einrichten. Lesen Sie mehr über den Durchsatz-Timer hier: https://www.blazemeter.com/blog/how -verbrauch-j-meter-durchsatzkonstante-timer

Lösung 2:
Verwenden Sie "SetUp Thread Group". Sie können die Thread-Nummer und die Rump-Up-Zeit berechnen, um die gewünschten Threads pro Sekunde zu erhalten.

1
Yury Ustsinchyk

Sie können Schedule Feedback Function verwenden und benötigen außerdem die Concurrency Thread Group 

0
raman rayat