I have the following arrangement in a Test Plan:
Thread Group
- Module Controller
where the module references/includes the following:
Test Fragment
- Transaction Controller
-- BeanShell Sampler -or- BeanShell PreProcessor
-- While Controller
--- HTTP Request
--- BeanShell PostProcessor
...
The BeanShell Sampler (or PreProcessor) simply initialises a number of
variables:
vars.put("MaxNofAttempts", String.valueOf(bsh.args[0]));
vars.put("AttemptCount", "0"); vars.put("RC", "0");
The While test is:
${__javaScript("${RC}"!="200" && "${RC}"!="500" &&
"${MaxNofAttempts}">"${AttemptCount}")}
The PostProcessor checks the response-code of the HTTP request (which may be a
meaningful 4xx, leading to an increment of the key variable):
vars.put("RC", ctx.getPreviousResult().getResponseCode());
if (vars.get("RC").substring(0, 1).equals("4")) { vars.put("AttemptCount",
String.valueOf( Integer.parseInt(vars.get("AttemptCount"))+1 )); }
If I use a BeanShell Sampler the arrangement works as expected (ie. up to a
fixed number of retries upon 4xx response-codes, or flow-through upon 200 or
500).
However, if I use a BeanShell PreProcessor instead, the While test fails
(leading to an infinite loop) because the value of the 'AttemptCount' variable
appears unchanged.
I don't understand this. I'd appreciate an explanation and/or suggestions. (For
what it's worth, I originally had JSR223 elements, with the same result).
Cheers,
Nige