2016-06-30 13 views
0

Ich benutze JMeter, um einen Apache2-Server zu testen, den ich konfiguriert habe. Ich möchte testen, ob der Server 200 HTTP-Anfragen, die jede Sekunde kommen, für eine hohe Anzahl von Sekunden (wie 1 Minute oder mehr) wiederholt verarbeiten kann. Ich habe die JMeter-Dokumentation gelesen, aber es war ein wenig schwierig zu verstehen, wie die Timer funktionierten. Ich baute den Test mitSenden von HTTP-Anfragen zu bestimmten Zeitpunkten mit JMeter

- Numbers of Threads 200 
- Ramp-up period 1 
- Loop Count 100 

Nun, soweit ich verstanden und bemerkte, das Verhalten von JMeter ist zu versuchen, die 200 Fäden in 1 Sekunde zu erhöhen, und dann 200 * 100 = 20000 Anfragen durchführen, so schnell wie möglich (oder zumindest ist dies das Verhalten, das ich auf meinem Server habe), in Stücken von 200 Anfragen pro Zeit. Dies bedeutet, dass der Server (tatsächlich) mehr als 200 Anfragen pro Sekunde erhält. Das Verhalten, das ich reproduzieren möchte, ist stattdessen, 200 Anfragen genau jede Sekunde zu haben. Es ist mir egal, ob sie zu Beginn der Sekunde alle zusammen kommen, oder sie kommen in einer zufälligen Weise, verteilen das zweite Fenster (eines alle 5 Millisekunden oder was auch immer). Also habe ich einige Timer ausprobiert, aber ohne Erfolg. Ich habe versucht:

  • Constant Timer mit einer Thread-Verzögerung von 5 Millisekunden. Bei der Berechnung sollte es alle 5 Millisekunden eine Anfrage senden, und 200 Threads sollten 200 Anfragen/Sekunde (200 * 5 = 1000ms) senden.
  • Constant Throughput Timer mit einem Zieldurchsatz von 12000.0. Vielleicht liege ich hier falsch, aber das sollten Proben pro Minute sein, also 200 Anfragen pro 60 Sekunden sind 200 * 20 = 12000 (wenn eine Probe eine Anfrage ist). Ich habe die Option "Durchsatz berechnen basierend auf" nicht verstanden und habe sowohl "nur diesen Thread" (welcher?) Als auch "alle aktiven Threads" ausprobiert.

Wie auch immer, nichts von dieser Konfiguration verhält sich wie ich brauche.

+0

Versuchen Sie, die 'Constant Timer' mit 1000 verwenden Millisekunden. Jeder Thread sollte dann jede Sekunde eine Anfrage für 200 Anfragen/Sekunde machen. – RowlandB

+0

Um 200 Verbindungen in einer Sekunde aufzurufen, sollten Sie [Synchronizing Timer] (http://jmeter.apache.org/usermanual/component_reference.html#Synchronizing_Timer) verwenden. Der Zweck des SyncTimers besteht darin, Threads zu blockieren, bis die Anzahl der Threads X blockiert wurde, und dann alle auf einmal freigegeben werden. Ein SyncTimer kann somit große Momentanlasten an verschiedenen Punkten des Testplans erzeugen. – Adnan

Antwort

3

Sie können dies erreichen, indem Sie Constant Throughput Timer verwenden.

konstanten Durchsatz Timer kann nur Pause die Fäden „Ziel Throughput“ angegebenen Wert zu erreichen, so stellen Sie sicher, genug virtuelle Benutzer (Threads) bieten gewünschte „Anfragen pro Minute“ Wert zu generieren.

, also 200 Anfragen/s erhalten Sie unten Dinge zu beachten haben:

  1. Stellen Sie sicher, dass Sie genug Anzahl virtueller Benutzer (Threads) in Ihrem Thread-Gruppe haben.

  2. Der Durchsatz-Timer ist ziemlich genau auf "Minuten" -Pegel, Sie müssen "warten", bis er 60 Sekunden lang wie erwartet funktioniert. Stellen Sie sicher, dass Sie Enough Durations haben.

  3. Verwenden Sie den Constant Throughput Timer unter test plan level.

  4. Use "Throughput berechnen basierend auf" Wert als "alle aktiven Threads".

Beachten Sie auch, dass starke Text andere Elemente (zum Beispiel andere Zeitgeber, die Anzahl der festgelegten Fäden, und so weiter) innerhalb des Testplanes den gewünschten Durchsatz zu erreichen beeinflussen können.

So ist hier eine Technik, die Sie folgen können:

Zuerst die folgenden Konfigurationen verwenden und den Durchlauf Ergebnisse beobachten.

Numbers of Threads : 200 

Ramp-up period : 60 seconds 

Loop Count : Check "Forever". 

Duration (seconds) : 360 

Wenn es nicht so ist zu erwarten (niedriger als erwartet), dann Anstieg die Number of threads allmählich und beobachten die Durchsatzergebnisse erhöht oder nicht.

Sie müssen die Anzahl der Threads erhöhen, bis Sie Ihre gewünschten Durchsatz bekommen.

Auf diese Weise, wenn Sie nicht Ihren gewünschten Durchsatz bekommen (200 Request/sec), dann Ihre Anwendung kann nicht mehr Anfragen dienen pro Sekunde als 200.

+0

Jetzt bin ich etwas verwirrt. Die Ramp-up-Phase sollte "lange bis zum Beginn jedes Benutzers verzögern" sagen. Warum sollte ich es auf 60 setzen? Würde ich nicht jemals 200 Verbindungen in einer Sekunde haben, wenn das System sie in einem Zeitfenster von 60 Sekunden anhebt? Dann ist es richtig, dass der Durchsatz, den ich erreichen sollte, 12000 ist? – McKracken

+0

Ja, Sie können Ihre Hochlaufzeit auf Ihre Anforderungen abstimmen. Was meinst du mit 200 Verbindung? Ich nehme an, es sollte Anfragen oder Proben sein. Um 200 Anfragen pro Sekunde zu erhalten, müssen Sie "12000" in Ihrem Zieldurchsatz verwenden. Stellen Sie sicher, dass Sie genügend Anzahl von Threads und Dauern in Ihrem Testplan haben. – Jahan

+0

Entschuldigung, ich meinte 200 Anfragen/Sekunde. Wenn ich es richtig verstanden habe, könnte ich denken, dass das Problem mit dem "Constant Throughput Timer" ist, dass es Intervalle für die Anfrage zufallsverteilt und versucht, den gewünschten Durchsatz zu erreichen. Also, obwohl es ein echtes Szenario simuliert, garantiert es mir nicht genau 200 Anfragen/Sekunde. Es werden mehr oder weniger Anfragen ausgelöst, abhängig vom tatsächlichen Guthaben. – McKracken