2008/5/3 sebb <[EMAIL PROTECTED]>:
> 2008/5/3 sebb <[EMAIL PROTECTED]>:
>
>
> > 2008/5/3 anneb <[EMAIL PROTECTED]>:
>  >
>  > > 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.
>  >  >
>  >
>  >  Yes.
>  >
>  >  However intSum() would perhaps be simpler to use in this case.
>  >
>  >
>  >  >  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'?
>  >
>  >  UDVs are Configuration items - they are processed once at the start.
>  >
>  >
>  >  >  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.
>  >
>  >  I guess the docs need to be updated...
>  >
>
>  There were several other uses of SampleResponse where SampleResult was meant.
>  These have been corrected, and will be in the next release.
>
>
>
>  >
>  >  >  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:
>  >  >   [EMAIL PROTECTED]
>  >  >  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?
>  >
>  >  Possibly, I've not used BSF much.
>  >
>
>  I've just tried, and similar scripts work fine with Beanshell.
>
>  It looks like the Javascript interpreter is more picky about re-use.
>
>  I'm trying to find out what is missing from the BSF Sampler as far as
>  Javascript is concerned.
>

Looks like the problem is that some BSF engines (e.g. Javascript)
cannot handle the defineBean() call - they require the engine to be
started with all the beans already defined. The same engine was being
reused, hence the stacktrace on the second and later calls.

The code now creates the manager and engine each time, and Javascript
now seems to work OK.

Thanks for raising the documentation and stack trace issues.

>
>  >  >  Is there a working sample around that does some variable arithmetic
>  >  >  wile iterating through a control loop?
>  >
>  >  Try using the User Parameters Pre-Processor instead; that will run
>  >  before every sample in scope.
>  >
>  >  Or use the functions on the samplers directly.
>  >
>  >
>  >
>  >  >  Thanks,
>  >  >
>  >  >  Anne
>  >  >
>  >  >  ---------------------------------------------------------------------
>  >  >  To unsubscribe, e-mail: [EMAIL PROTECTED]
>  >  >  For additional commands, e-mail: [EMAIL PROTECTED]
>  >  >
>  >  >
>  >
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to