jmeter-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anneb <ablank...@gmail.com>
Subject how to do arithmetic with variables inside logic controllers?
Date Sat, 03 May 2008 01:48:23 GMT
Hi,

I am trying to do some calculations with variables inside a loop
controller, but it looks like variables are reset to their initial
values each time the loop is executed.

What I am doing (Jmeter 2.3.1):

test plan
--thread group
----User defined variables (name: y, value 0)
----Loop Controller (loop count: 4)
------User defined variables (name: z, value ${__javaScript(${y}+1,y)} )
------Debug Sampler
 ------View Results Tree

according to the documentation the function ${__javaScript(${y}+1 ,
y)} adds 1 to the value of jmeter variable 'y' and stores the result
in jmeter variable y.

Indeed something like that seems to happen, because this is what I get
under tab "response data" for each of the 4 elements in the reponse
tree:
 JMeterVariables:
START.YMD=20080502
JMeterThread.last_sample_ok=true
 y=1
START.MS=1209764719713
z=1
START.HMS=234519
y=0


I was hoping to see y increase by 1 for every iteration through the
loop, but it remains stuck at a value of 1.

What is happening? What am I doing wrong? Why does variable 'y' seem
to be reinitialized when assigned to new user defined variable 'z'?
How can I use variables inside a loop that memorize values assigned in
previous iterations through the loop?

I looked at other ways of changing variables in loops such as the
counter pre processor, but for my metering purposes I need more
variables and I need to do more than just simple increments by fixed
amounts.

Then I found the BSF sampler, but there is at least an error in the
documentation:
at http://jakarta.apache.org/jmeter/usermanual/component_reference.html
where it is stated that responses should be returned through

 SampleResponse.setSuccessful(true/false)
 SampleResponse.setResponseCode("code")
 SampleResponse.setResponseMessage("message")

but "SampleResponse" is not a known object to javascript in this context.
I figured out that instead SampleResponse

SampleResult.setSuccessful(true);

should be used.

resulting in the following setup:
test plan
--thread group
----User defined variables (name: y, value 0)
----Loop Controller (loop count: 4)
------BSF Sampler
------Debug Sampler
------View Results Tree

The BSF Sampler script is:
vars.put("y",${y}+1);
SampleResult.setSuccessful(true);
SampleResult.setResponseCode("200");
SampleResult.setResponseMessage("OK") ;


Now only the first iteration through the loop works reasonably well:
Result Tree response data:
BSF Sampler:
  org.apache.jmeter.threads.JMeterContext@adfbf1
Debug Sampler:
  JMeterVariables:
  START.YMD=20080502
  JMeterThread.last_sample_ok=true
  START.MS=1209764719713
  START.HMS=234519
  y=1

However in the second and later iterations the BSF sampler fails and
jmeter.log contains the following messages:

WARN  - jmeter.protocol.java.sampler.BSFSampler:
java.lang.RuntimeException: No Context associated with current Thread
        at org.mozilla.javascript.Context.getContext(Context.java:2195)
        at org.mozilla.javascript.ScriptRuntime.toObject(ScriptRuntime.java:834)
        at org.mozilla.javascript.Context.toObject(Context.java:1572)

It looks like the required jmeter context passed to the javascript
interpreter got lost at the end of the first execution of the BSF
sampler?

Is there a working sample around that does some variable arithmetic
wile iterating through a control loop?

Thanks,

Anne

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-user-help@jakarta.apache.org


Mime
View raw message