Throughput shaping time together with Concurrency Thread Group

742 views
Skip to first unread message

maurizio...@gmail.com

unread,
Sep 11, 2018, 7:06:03 AM9/11/18
to jmeter-plugins
Hi,

I have to load test a web application (calling URL with GET/POST with specific parameters) composed by the following steps
  1. open a reference (test) application
  2. call a /Login endpoin
  3. call 3 times an /authenticate endpoint (username and password)
  4. call twice an /authorize endpoint
  5. call a logout endpoint
I put these 5 steps in a Transaction Controller called "Load Test Controller", this one under a Concurrency Thread Group and having a Throughput Shaping Timer.
The goal of the load test is to have at least 8 concurrent users executing the 5 steps above.
01.png

Fact is: if I set in the Concurrency Thread Group to have
  • target concurrency = 30
  • ramp up time (s) = 10
  • ramp uip steps count = 5
  • hold target rate time (s) = 180
02.png

I got between 1 to 9 requests per second, with an average more or less of 4 RPS:
03.png


Ok, now if I want to use the Throughput Shaping Timer with Concurrency Thread Group, then I configure them to have 2 RPS and using the callback function ${__tstFeedback(throughputShapingTimerDev, 1, 50, 50)}
04.png
05.png


Well, here the results are epic bad: threads jump from 1 to 52 in 3 seconds, and then everything is stuck. I mean, the "00-ref-app" (picture 03, red line) is loaded only 2 times per second, and the first thread terminating the whole procedure "Load test controller" (green line in picture 03) takes more than 3 minutes (and is not even displayed below!)
06.png


I'm pretty sure I did not understand properly how these 2 items can be related, but I do not have any precise idea where the error(s) can be.

Any suggestion is appreciated.

thank you in advance.




Andrey Pokhilko

unread,
Sep 11, 2018, 8:50:42 AM9/11/18
to jmeter-...@googlegroups.com

Hi,

What do you want to achieve in your test? Is it certain level of parallel VUs? Or is it certain level of hits/s?

It seems you have configured everything fine for testing certain level of hits/s. But your app seems to be unable to handle it. Looks like your app responds quite slow and 2 hits/s is too much. So maybe your result is right and you found that you need to request less hits/s.

Also, I'd suggest to use ramp-up time in TST, so any request rate you request would be added by small increments.

--

Andrey Pokhilko

11.09.2018 14:06, maurizio...@gmail.com пишет:
--
You received this message because you are subscribed to the Google Groups "jmeter-plugins" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jmeter-plugin...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Maurizio Lattuada

unread,
Sep 11, 2018, 9:56:36 AM9/11/18
to jmeter-plugins
Hi Andrey,
thank you for your quick answer.

this is a good question that I have already on my todo list to be clarified with the business. The requirement is to have "8 calls per second for 60 minutes". Considering that this login process, for which we have to guarantee 8 calls per second, is composed by 4 steps (I excluded the 5th one "Logout"), I intended it as "8 users concurrently involved in the 4-steps-long login process"., so hits/s.

My big misunderstanding is
  • I use only the concurrency thread group (150 threads, ramp up 60s, 5 steps) without any relationship with throughputShapingTimerDev (the latter is disabled too) --> I can have between 1 and 9 hits/s, that is between 1 and 9 users involved in the 4-steps-long login process: 

40x30x5.png



  • I use the concurrency thread group *with* relationship with throughputShapingTimerDev having a fixed target of 2 RPS and using the tstFeedback function and ramp up time of 60s (${__tstFeedback(throughputShapingTimerDev, 10, 150, 50)}, note the max amount of thread = 150, like above) --> I have only 1 RPS and the 1st one is after 2 minutes..., plus having different warning messages "WARN k.a.j.t.f.TSTFeedback: Got concurrency less than zero: -7"

tst.png



why there is such a huge different in the results in terms of RPS? :(
Which concept is not correctly understood?

Andrey Pokhilko

unread,
Sep 11, 2018, 10:03:28 AM9/11/18
to jmeter-...@googlegroups.com

Are you sure you are using latest version of TST plugin?

--

Andrey Pokhilko

11.09.2018 16:56, Maurizio Lattuada пишет:
--

Maurizio Lattuada

unread,
Sep 11, 2018, 10:06:44 AM9/11/18
to jmeter-plugins
Yes, version 2.5

tst-plugin.PNG


is it correct, right?

Maurizio Lattuada

unread,
Sep 11, 2018, 10:14:11 AM9/11/18
to jmeter-plugins
Just to mention, JMeter 4.0 and JDK 10.0.2

Here the setup with some more comments:

test-setup-comments.png

Andrey Pokhilko

unread,
Sep 11, 2018, 10:15:59 AM9/11/18
to jmeter-...@googlegroups.com

Then it's quite strage that you get message about negative rates...

Anyhow, it seems that request rates you work with, need very slow start. I advice you to configure the ramp-up of TST into very small levels, like ramping from 0.1 to 1 within 1 min. So it will be more forgiving the slow responses.

Also, cap the thread count in your tst function with also value ~15-20, so it won't kill you server as bad. Or even 10.

--

Andrey Pokhilko

11.09.2018 17:06, Maurizio Lattuada пишет:

Maurizio Lattuada

unread,
Sep 11, 2018, 10:43:23 AM9/11/18
to jmeter-plugins
To avoid misunderstanding, with "cap the thread count" do you mean to set e.g. equal to 15 the parameter B of function ${__tstFeedback(throughputShapingTimerDev, A, B, C)}, right? --> ${__tstFeedback(throughputShapingTimerDev, 5, 15, 5)}
Plus a step up like 

tst-stepup.PNG


Sounds good?

Andrey Pokhilko

unread,
Sep 11, 2018, 10:54:40 AM9/11/18
to jmeter-...@googlegroups.com

Function cap is good.

For TST schedule, start with smaller value. 0.1 is ok IMO. And use longer ramp-up, like 2 minutes or even 5.

Andrey Pokhilko

11.09.2018 17:43, Maurizio Lattuada пишет:
--

Maurizio Lattuada

unread,
Sep 12, 2018, 4:30:02 AM9/12/18
to jmeter-plugins
Tried right now with this TST setup (throughputShapingTimerDev):
tst-stepup-slow.PNG


And the concurrency thread group having target concurrency equal to ${__tstFeedback(throughputShapingTimerDev, 3, 15, 1)}


CTG.png




Right at the beginning of the test, 6 threads are launched:
threads.PNG


but, according to what I read and understand from the hits per second and transactions per second charts, it seems these thread are sleepy/dead. I mean, platform is not loaded at all.
HPS.PNG
TPS.PNG



On the other hand, by using e,g, an ultimate thread group instead of concurrency thread group, and with the TST deactivated

UTG.PNG



the hits per seconds and transactions per second are way higher

HPS UTG.PNG

TPS UTG.PNG


So, this difference in the results makes me asking myself whether I understood correctly the meaning and how to use the ultimate thread group + TST elements together.

Andrey Pokhilko

unread,
Sep 12, 2018, 4:54:40 AM9/12/18
to jmeter-...@googlegroups.com

UTG is no way better than CTG for your case. Maybe you need to just remove TST from your test and use CTG to load the server and see if TPS you get is higher or equal to your SLA.

--

Andrey Pokhilko

12.09.2018 11:30, Maurizio Lattuada пишет:
Reply all
Reply to author
Forward
0 new messages