Jmeter Distributed Testing: Change the load throughput (requests/second) in runtime - jmeter

I've set up a jmeter distributed testing setup with one master and multiple slaves.
In my test plan I'm using a ThreadGroup with 5 threads, a HTTPRequest Sampler and a Constant Throughput timer with target set as - ${__P(throughput, 100)} for all active threads in current threadgroup.
I want to change the expected request 'throughput' value in runtime for my setup.
Eg. initially the default value of requests/minute (throughput) = 100. After 1 hour of execution, I want to change the requests/minute to 6000.
Using beanshell script to change throughput only changes the value on jmeter master while there's no effect on jmeter slaves and overall requests throughput.
Thanks for any pointers and guidance.

You can consider using Beanshell Server, it will launch an endpoint where it will be listening to the commands so you would be able to change the throughput property value "on the fly"
Add the next lines to user.properties file:
beanshell.server.port=9000
beanshell.server.file=../extras/startup.bsh
Create a Beanshell file like changeThroughput.bsh in "lib" folder of your JMeter installation with the following content:
setprop("throughput", args[0]);
That's it, now you should be able to set the throughput property value during your test execution:
java -jar bshclient.jar localhost 9000 throughput 6000
Check out How to Change JMeter´s Load During Runtime article for more information.

Related

Jmeter Load Testing Calculations

I need to run a Load test for 250 users for 1 hour. What are variable which I need to consider when I'm planning the load test?
The relevant Thread Group configuration would be something like:
You might also want to specify Ramp-Up period, with the above setup JMeter will kick off all users in 1 second and normally people want to increase the load gradually in order to be able to correlate the increasing load with changing metrics like response time, throughput, number of errors, etc.
More information:
JMeter - Elements of Test Plan - Thread Group
JMeter Ramp-Up - The Ultimate Guide

Jmeter- How many sample requests are created with this config?

I have a question related to JMeter, I have thread with config below:
Number of Threads (Users): 5
Ram-Up Period (In second): 5
Loop: Forever
Duration(seconds): 2
How many sample request are created with above config ?
I am using the JMeter version 5.0.
We don't know. It mostly depends on your application response time which is the main factor of Elapsed Time in JMeter.
The only way to get the number is to measure it
Run your test in command-line non-GUI mode as:
jmeter -n -t your-test.jmx -l result.jtl
Once test is finished open JMeter GUI, add a Listener of your choice, i.e. Aggregate Report to your Test Plan and open result.jtl file using "Browse" button - you should see the number of executed samplers as well as other metrics (response time, throughput, latency, etc.)
No of Threads=5 and Ramp up time =5 seconds.
So after every 1 second, next thread will be active.
So ideally it will process maximum 3 samples.
In jmeter Summary report, you could check the sample requests.

Increase number of threads in JMeter during execution

I have a performance test in JMeter and would like to test maximum system performance/throughput with it. So number of active threads should be increased for example while Error rate is under 2 %. I found Constant Throughput Timer, put it into Thread Group but it only pause or slow down threads. I tried define it as follows, with a property: ${__P(throughput,)}, but not sure what should be correct value for this property. I can't see how JMeter could measure system maximal performance.
There is no Out of the box solution as of JMeter 3.3, see this enhancement request:
https://bz.apache.org/bugzilla/show_bug.cgi?id=57640
Still it is possible to dynamically add threads since JMeter 3.2 (see https://bz.apache.org/bugzilla/show_bug.cgi?id=60530) in a JSR223 Test Element using JMeterContext:
ctx.getThreadGroup().addNewThread(delay, ctx.getEngine());
So based on this, you could in a JSR223 Test Element (Pre/Post Processor or Sampler) check the presence of a file in a folder of your choice named :
NUMBER_OF_THREAD_TO_ADD.txt
If present, use its name to compute number of threads and call this method.
There is no such functionality in the "vanilla" JMeter howere it is possible with plugins, check out:
Concurrency Thread Group
Throughput Shaping Timer
They can be connected together via feedback loop so Concurrency Thread Group will add more threads if needed to reach the desired number of requests per second.
You can install both the plugins (and keep them up-to-date) using JMeter Plugins Manager

Webservice testing using Jmeter

I am new to JMeter and I have been tasked to do a POC where I need to load test the webserivce. I learnt the basics like adding the test plan, adding threads, adding SOAP/RPC Requestsampler and I got the response as well. But, I am not sure how to achieve the below scenario using JMeter.
I need 600 users to hit the service per request/second (this should run for 10 minutes) and the 2nd scenario is about 2000 users to hit the service at 5 request/second (again this should run for 10 minutes)
Also, would it be possible for JMeter to handle this many number of threads/users?
Any inputs would be deeply appreciated.
Given you properly configure JMeter it shouldn't be a problem to simulate 2k users, actually you may need more as if your web service response time will exceed 1 second - you won't be able to achieve 2k requests per second.
Configuring JMeter:
Run test in non-GUI mode
Disable all Listeners (if any)
Increase JVM Heap size
See 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure for detailed explanation and instructions
Simulating 600 / 2000 requests per second.
Set "Loop Count" to Forever or -1 in Thread Group
Tick "Scheduler" box and set desired duration (600 seconds)
Add Constant Throughput Timer and specify the desired throughput in requests per minute
It is recommended to use HTTP Request sampler for web services testing, you can set Content-Type and SOAPAction headers using HTTP Header Manager

How can I test the limit of the number of threads with Jmeter

Is it possible to automate the load tests in Jmeter and increase the number of threads until the first error is observed?
For example I start with testing 16 threads for every seconds and increase the number until i receive an error. But instead of doing this manually can I let this run automatically?
Looking into Pre-defined Properties section of JMeter's User Manual on Functions there is a JMeterThread.last_sample_ok variable holding result of the last sampler execution.
So if you build your test plan as follows:
Sampler which does test action
If Controller checking whether previous sampler was successful
If not - relevant actions (stop test, send email, stop ramping up virtual users, etc.)
The value you need to put in "Condition" input of If Controller should look like
"${JMeterThread.last_sample_ok}"=="false"
See How to use JMeter's 'IF' Controller and get Pie for more information on JMeter's If Controller.
Regarding threads in jmeter You may find those 2 links interesting:
What is the highest number of threads that is reasonable to simultaneously run in Jmeter?
JMeter max. thread limit
Regarding your methodology, why not use slow rampup and see the limit using what Dmitri T has provided ?

Resources