How to delay execution until all threads have ramped up - jmeter

I am using an ultimate thread group to log in 1000 users in a period of 30 minutes. Only after all the users have logged in do I want to execute further scenarios.
The way I thought about doing this was to start a global timer and delay each thread for 30 minutes - (current time - start time) e.g. test starts at 9am and thread 1 completes login in 10 seconds so it would be delayed for 30 minutes - (9:00:10 - 9:00:00) i.e. 29 minutes and 50 seconds. And for example thread 500 would start at 9.15 and login takes 30 seconds then the delay for this thread would be 30 minutes - (9:15:45 - 9:00:00) i.e. 14 minutes and 15 seconds. In this way after 30 minutes I'll have 1000 users all logged in ready to execute the next steps. Does this make sense?
Is there are a more elegant way of doing this perhaps with built in JMeter functionality?

You're using the wrong timer, the easier solution would be going for Synchronizing Timer
Add it as a child of the second sampler (or whatever is doing the real stuff after the login)
Set "Number of Simulated Users to Group by" to 1000
This way the ramp-up/login will happen according to the ultimate thread group schedule and after that JMeter will wait until there will be 1000 active threads at the location of the Synchronizing Timer and once there are 1000 users - they will be released at exactly the same moment.
More information: Using the JMeter Synchronizing Timer

Related

100 requests per minute for a duration of 20 minutes - Load/performance testing

I am doing load test on my system using Jmeter. the requirement is I need to generate 150 requests per minute for a duration of 20 minutes constantly.
I tried with below approaches
I tried by giving this configuration.
No of threads - 3000 [150 req/min * 20 mins]
rampup period - 1200sec [20mins * 60]
But here test stopped after creation of 2004 thread. by giving
this error
Failed to start the native thread for java.lang.Thread “Thread Group 1-2004”
Uncaught Exception java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached in thread Thread[#51,StandardJMeterEngine,6,main]. See log file for details
Used concurrency thread group with below details
Target concurrency - 150
ramp up time - 1 min
hold target rate time - 20 mins
but here no of samples collected are more than 3000 [150 req *20 sec] which i feel is not correct
Is it possible to create exact load according to my requirement in Jmeter(150 req/min ->duration of 20 mins) or should I explore other tools like locust??
tried with precision timers (attaching screen shots)
enter image description here
enter image description here
enter image description here
Your understanding of relationship between users and hits per second is not correct.
When JMeter thread (virtual user) is started it begins executing Samplers as fast as it can. The throughput (number of requests per second) mainly depends on the response time.
For example:
you have 1 user and 1 second response time - the load will be 1 request per second
you have 1 user and 2 seconds response time - the load will be 0.5 requests per second
you have 2 users and 2 seconds response time - the load will be 1 requests per second
you have 4 users and 2 seconds response time - the load will be 2 requests per second
etc.
If you want to slow down JMeter to the desired number of requests per minute it can be done using Timers.
For example:
Constant Throughput Timer:
Precise Throughput Timer:
Throughput Shaping Timer

Can I apply factor when running load tests jmeter

I have the following scenario:
every 1/2 hour a user send a file to the server
every 5 seconds a user pings the server
do it for 4000 users during 24 hours
my question is, can i do the following and achieve the same results?
every 15 minutes a user send a file to the server
every 2.5 seconds a user pings the server
do it for 2000 users during 24 hours
thanks.
Add Thread Group to your Test Plan and configure it to have 4000 virtual users, loop forever and run for 84600 seconds (24 hours * 60 minutes per hour * 60 seconds per minute)
Add a HTTP Request to ping the server
Add Constant Throughput Timer as a child of the HTTP Request sampler and configure it to fire 12 times per minute (60 seconds in minute / 5 seconds)
Amend Calculalte throughput based on dropdown value according to your test scenario (whether each user or any user should ping the server each 5 seconds)
Apply the similar configuration for remaining use cases.

jmeter: Is it possible in a thread group with 10 users, to have each request to loop for 50 times or run for 10 mins?

jmeter: Is it possible in a thread group with 10 concurrent users, to have each request to loop for 50 times or run for 10 mins?
Requests should run in parallel.
Thanks.
In Thread Group:
Number of Threads (Users): 10
Ramp up period: 0 - so threads will be executed in parallel
Check the Scheduler checkbox and enter Duration 600 (10 minutes in seconds)
Add Loop Controller with loop count 50
Your test will execute Users in parallel for maximum 10 minutes and then stopped.

How to get the responses of only the spike added in the soak test in jmeter?

My scenario is I'm running 50 threads for 15 mins and the running 100 threads for 15 mins. The total time of the of the test is 21 mins.
The 50 threads will start running after 10 seconds, slowly ramping up, for 5 mins 50 threads will run simultaneously and then after 5 mins 100 threads with start running slowly with ramping up and run for 15 mins.
After 100 threads finish the 50 threads will continue there running.
The image below will show you the jp#gc thread group
The image will show you the jp#gc ultimate thread group
I only want the responses (maily in graph format ) drilled down to only when 100 users are present, I dont want aggregate of all the soak test.How can this be done? I have also tried loading the jtl.gz file on https://loadosophia.org , it also gives the aggregate reportwhich i dont want.
I only want the specific report of the spike added of 100 users for 15 mins
Please let me know.
Thanks in advance
You can grep your file to only select the interval of time you want and use it to generate file.
Another option is to use this method:
http://www.ubik-ingenierie.com/blog/automatically-generating-nice-graphs-at-end-of-your-load-test-with-apache-jmeter-and-jmeter-plugins/
With this plugin:
http://jmeter-plugins.org/wiki/GraphsGeneratorListener/
And use the fields :
Start Offset
End Offset

jmeter ultimate thread group with relation to constant timer

Scenario :
a. Ultimate Thread Group : Thread count :100, Startup time : 60, Hold load : 300
b. If there are 10 Http(s) request in the script and each is having 1 sec of constant timer, total constant time value = 10 seconds.
In the above scenario the hold time will become 300 +(100 *10) OR 300 +(10) OR 300 -(100 *10) OR 300 -(10)
Your timers on samplers don't have anything to do with your total test time. So in your above example, it will simply be 60+300 seconds.
When a thread finishes its 10 requests, it will start again. So once your test is ramped up, each thread will execute them 30 times. If you increased your timers, the 10 request would take longer to complete, so fewer iterations of them would be done- but it wouldn't change your duration.
Timers and holdtime works independently, they are not related.
In your example-
Test will start loading Threads as test begins and by end of 60 seconds all 100 threads would be up.
Individual thread execution depends on response of each request sent on server (in your case 10 requests/thread), so constant timer will wait for 1 seconds before sending next request of same thread to server.
So, hold time ensures same 100 users(threads) load on server for specified period. As and when one thread completes its execution cycles (all 10 requests), it will add another thread to maintain same load during test time specified as hold time.
Test will get completed in 30+60 = 90 seconds.

Resources