TiredOfProgramming
TiredOfProgramming

Reputation: 855

Jmeter: unable to use multiple conditional statements in If Controller

ANSWER TO THE QUESTION

Please, dear reader, if you wish, you can proceed further and read through the question. But at the most top I'm willing to provide Dmitri's answer, so that others won't waste time playing around with Jmeter If Controller.

If you wish to use multiple condition statement in If Controller, specifically if you want to check that variables equal some strings, DON'T USE ${__javaScript()} FUNTION!!! Dmitri suggested to use instead ${__groovy()} function, which worked in my situation. Correct syntax below. Pay attention to opening parenthesis, comma location and closing curly brackets:

${__groovy((vars.get('yourVariable').equals('someString') && vars.get('yourAnotherVariable').equals('someOtherString')),)}

Addition

If you want to save your time while trying to make If Controller working with multiple conditions, always uncheck Interpret Condition as Variable Expression checkbox. Otherwise you will have to stuck with those __javaScript, __groovy or other functions, as there is no way to understand how the hell they suppose to work and why they don't resolve to true or false (log file is always clean at this situation). This is how you do without help of those "functions". Please see my example below

${yourVariable} != 'not_found' && ${youAnotherVariable_matchNr} == 1 

That's it, no need to use any functions.

enter image description here


INITIAL QUESTION

In Jmeter v4.0 r 1823414 I can use If Controller only with single statement, but not with multiple. Example of using multiple statements I have taken from here and it was suggested to use

${__javaScript("${responsecode}"=="404")} && ${__javaScript("${responseMessage}" == "Not Found")}

I have also checked blazemeter tutorial page, but it says nothing about multiple conditional statements inside If Controller.

Example of my Test Plan is below

enter image description here

In my Debug Sampler I can see following

enter image description here

At some place in the Test Plan I put IF Controller to check that both variables are equal to not_found...

${__javaScript(vars.get('manual_bug')=='not_found')} && ${__javaScript(vars.get('integration_bug')=='not_found')}

...so all the subsequent actions are executed. However, this IF Controller either never gets executed or always return FALSE. Not sure what's happening with it.

Before blaming me :-) that I didn't do enough research and rushed to ask a question on SO, I will provide below samples of what I've already tried and that didn't help:

${__javaScript(vars.get('manual_bug') == 'not_found')} && ${__javaScript(vars.get('integration_bug') == 'not_found')}

${__javaScript(${manual_bug} == 'not_found')} && ${__javaScript(${integration_bug} == 'not_found')}

My log file looks completely fine, no errors

enter image description here

enter image description here

Please advise if someone was able to execute multiple conditional statements in the Jmeter tool? Thanks!

Upvotes: 1

Views: 2531

Answers (2)

singh2005
singh2005

Reputation: 1311

The following syntax (with double quotes) works too, however it also requires that you uncheck the 'Interpret Condition as Variable Expression' setting.

"${yourVariable}" != "not_found" && "${youAnotherVariable_matchNr}" == "1" 

Upvotes: 0

Dmitri T
Dmitri T

Reputation: 168197

In the link you're referencing the 2 clauses are in a single __javaScript() function and you have 2 different functions so JMeter doesn't know what does your && means especially given Interpret Condition as Variable Expression? default mode of the If Controller.

Also if you open If Controller GUI you will see the following warning:

For performance it is advised to check "Interpret Condition as Variable Expression" and use __jexl3 or __groovy evaluating to true or false or a variable that contains true or false. ${JMeterThread.last_sample_ok} can be used to test if last sampler was successful

Therefore I would recommend reconsidering your approach and use __groovy() function, the relevant syntax would be:

${__groovy((vars.get('responseCode').equals('404') && vars.get('responseMessage').equals('Not Found')),)}

Demo:

JMeter If Controller Multiple Clauses

Upvotes: 1

Related Questions