Jmeter defining Throughput - jmeter

Yes i have six months experiences with Jmeter and i have a learned a lot, but not all. Now i have faces with problem from management. They need too see a throughput for each action for one test case.
Test case:
- Log In (get loginID)
- call service for creating data( with Loginid)
- call service for creating data1( with Loginid)
expected result:
Login: 2 logins per second ( response take from 400 ms to 670 ms)
Call service: should be executed for 100 times per second ( from 30 ms up to 60 ms).
loop for call service 10 times.
Test case in jmeter:
Thread Group
- Transaction controler #1
-- Login
-- Throughput Shapring timer ( Start RPS=2, END RPS=2, Duration=1)
- Transaction controler #2
-- Function generate random data for service1 and service2
-- Loop 10 times
--- call service1 for update table 1
--- call service2 for update table 2
-- Throughput Shaping timer ( Start RPS=100, END RPS=100, Duration=1)
Execution of the test:
Treads: 100 Users
Rampup period: 100 seconds
Duration: 900 seconds
Transaction controler #1 In the transaction per second is average 2
transaction per second
Transaction controler #2 In the transaction per second is average 100
transaction per second
Is this done in correct way or i miss something?
Thank you for support and advise.
Regards

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

Sequential test execution jmeter

I want to run 2 day test and I am making use of Thread Group Start time and end time feature.
I am looking for design as shown below :
Thread Group 1 (First day start and end time with date)
--> HTTP Request 1 (Execute for 30 minutes)
--> HTTP Request 2 (Should start after 30 minutes i.e. after first one is terminated)
--> HTTP Request 3 (Should start after 60 minutes i.e. after second one is terminated)
Thread Group 1 (Second day start and end time with date)
--> HTTP Request 1 (Execute for 30 minutes)
--> HTTP Request 2 (Should start after 30 minutes i.e. after first one is terminated)
Thread Group start and end times are absolute, therefore you will be able to execute the test only once without editing it. I would rather recommend sticking to relative times like:
Thread Group, 2 loops
Runtime Controller configured to run for 1800 seconds
HTTP Request 1
Runtime Controller configured to run for 1800 seconds
HTTP Request 2
Runtime Controller configured to run for 1800 seconds
HTTP Request 3
Flow Control Action sampler configured to pause current thread for 86400000 milliseconds (24 hours)

How can I make the test to stop (like gradual exiting) the remaining transactions when we hit the 1 hour mark before stopping the test completely?

My test plan is as follows:
Thread Group
Transaction Controller 1
Transaction Controller 2
Run time Controller
Transaction Controller 3
Transaction Controller 4
Transaction Controller 5
Transaction Controller 6
Controller 1 & 2 (Launch Application and Login) - should happen only once
Run time Controller contains some transactions - this will iterate for a
duration of 1 hour
Controller 6 (Logout) - should happen only once
All samplers are found inside the controllers.
I want to run my test for the duration of 1 hour. The problem is when I set
1 hour for my thread group and 1 hour for my runtime controller, Transaction
Controller 6 does not get executed. It all depends where the test flow has
reached when duration hit 1 hour.
How can I make the test to stop (like gradual exiting) but executes the
remaining transactions when we hit the 1 hour mark before stopping the test
completely?
Is there a controller that will wait for the remaining transactions to
execute before stopping the test even if the duration has reached 1 hour?
Your assistance will be greatly appreciated. Thank You
I think the only way to solve this is to take control of the ramp-down manually.
Change your thread group to loop only once, and remove the duration limit.
Put a BSF PreProcessor with this code under your very first sample:
if (vars.get("start_time") == null) {
vars.put("start_time", Date.now());
}
Replace your runtime controller with a While controller with a condition like this:
${__javaScript(Date.now() < ${start_time} + 1000 * 60 * 60)}
If you want gradual rampdown over, say, 5 minutes, you'll need to do something like this (newlines for clarity)
${__javaScript(
Date.now() < ${start_time} +
1000 * 60 * 60 +
1000 * 60 * 5 * ${__threadNum} / <your total number of threads>
)}
If you also have gradual rampup, you'll need to take that into account as well (or if you want the same rampdown as you had rampup, you can just use the first version).

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.

Jmeter - I have run 2 test cases but result seems odd

I have run load testing for website but when I have increased no. of users , I can see throughput time seems increasing instead of decrease.
Test Case 1 :
No. of Threads : 15
Ramp up time : 450 [As I want to put delay of 30 seconds between 2 users]
Loop count : Forever
Scheduler : 1800 Seconds [As I want to run test for 30 minutes]
In Http requests I have added 10 pages and each request has constant timer with 30000 miliseconds as I need to put delay of 30 seconds between 2 requests.
Now When I see result of Aggregate Report , it shows me Throughput 3/min for each request.
Test Case 2 :
No. of Threads : 30
Ramp up time : 900 [As I want to put delay of 30 seconds between 2 users]
Loop count : Forever
Scheduler : 1800 Seconds [As I want to run test for 30 minutes]
In Http requests I have added 10 requests/pages and each request has constant timer with 30000 miliseconds as I need to put delay of 30 seconds between 2 requests.
Now When I see result of Aggregate Report , it shows me Throughput 6/min for each request.
I am confuse that how it is possible? If my users are increased from 15 to 30 then it should have more load on server and throughtput should decrease like 1/min or 2/min.
Please let me know what I am doing wrong here.
Throughput is no. of completions per unit time. (A completion can be a http request/db request in short anything that needs to be executed and needs >0 execution time.)
Ex. req per sec or req per min etc.
By definition of throughput in JMeter, it is calculated as total no. of requests/total time.
In your first case, no. of requests generated in 1800 seconds with 3 second delay in every request by 15 users are x. Thus throughput is x/30 i.e. 3 it means ~90 requests were generated (verify this from aggregate report or other reporter.)
In your second case, everything else is same but no. of users are doubled which creates ~double no. of requests in given time which is (1800 seconds)
Thus according to formula, no. of requests generated/total time.
Throughput in 2nd case = 2x/30 = 2*throughput in 1st case
Which is 6/min. (Correctly shown by JMeter.)
Key here is to check no. of requests generated in both cases.
I hope this clears your confusion. Let me know if you need further clarification. BTW "when I have increased no. of users , I can see throughput time seems increasing instead of decrease." is not always true.
Throughput increased by factor of 2.
Test Case 1: - 3 requests per minute - 1 request each 20 seconds
Test Case 2: - 6 requests per minute - 1 request each 10 seconds
As per JMeter Glossary:
Throughput is calculated as requests/unit of time. The time is calculated from the start of the first sample to the end of the last sample. This includes any intervals between samples, as it is supposed to represent the load on the server.
The formula is: Throughput = (number of requests) / (total time).
You may also be interested in the following plugins:
Server Hits Per Second
Transactions Per Second
or alternatively Loadosophia.org service which can convert your JMeter .jtl results files into easy-understandable professional load report

Resources