Very odd.
I can confirm the behaviour; Post-Processors are run in the opposite
order to what one expects.
Looking at the code in JMeterThread.runPostProcessors() it actually
traverses the list of post-processors in reverse order. I've no idea
why it does this - some further investigation is needed. Perhaps
originally the post-processors were added to the list in reverse
order?
I need to check back with earlier releases to see what they did.
S.
On 26/09/06, Philip Peake <[EMAIL PROTECTED]> wrote:
Ok --- I found an answer. Not a particularly satisfactory one, but an
answer.
I became convinced that my "FOO" variable was just not getting set, and
that there was essentially nothing wrong with what I was trying to do in
the BeanShell - other than use an undefined variable.
I added aUser Defined Variable config element, set FOO there and that
worked. So the variable is not getting set by the regex extractor. I
tried everything. Including reversing the order of the regex extractor
and the BeanShell -- guess what? That works.
So I now have:
HTTP Request
|
-- BeanShell Postprocessor
|
-- Regular Expression Extractor
And when the BeanShell runs, it has the value set by the regex extractor
- reverse them again and it fails.
Checking the testplan .jms file, the XML shows the elements in the order
they are displayed in the GUI, so its not simply a display problem.
Anyone any clue why I have to have the elemet using the variable appear
before the element initializing that variable?
Philip
-------------------------------------------------------
sebb wrote:
> On 25/09/06, Philip Peake <[EMAIL PROTECTED]> wrote:
>> Hmm... the variable is not defined ....
>> But going back to my original e-mail, I said:
>>
>> > I have an HTTP Request sampler. Contained in the body of the page
>> > returned by this is the word "Squirrel".
>> > As a child of the HTTP Request I have a Regular Expression
>> > Extractor (Post Processor) set up as follows:
>> >
>> > Response Field: <Body checked>
>> > Reference Name: FOO
>> > Regular Expression: (Squirrel)
>> > Template: $1
>
> As mentioned in another e-mail, this should be $1$
>
>> > Default Value: "Missed"
>> >
>> > If I understand the documentation correctly, this should
>> > initialize a variable called FOO, accessible as ${FOO} which will
>> > contain "Squirrel" if that is present in the body of the response
>> > processed by the HTTP Request sampler, or "Missed" as a value if
>> > it is not.
>>
>> To which you replied:
>>
>> > > If I understand the documentation correctly, this should
>> > initialize a
>> > > variable called FOO, accessible as ${FOO} which will contain
>> > "Squirrel"
>> > > if that is present in the body of the response processed by the
>> > HTTP
>> > > Request sampler, or "Missed" as a value if it is not.
>> >
>> > Yes.
>>
>> So, which is it?
>
> The variable FOO will be set to the value of the template if the RE
> matches, otherwise the variable FOO will be set to "Missed".
>
> In your case, the value of the template was "$1", not "Squirrel", but
> the rules still apply.
>
>> Is it that variables defined in an imediately preceeding pos-processor
>> is not available in the next?
>
> The variables are available as soon as they have been defined, i.e. as
> soon as the post-processor has been run.
>
>> I am really trying to understand this....
>>
>> Philip
>>
>> -----------------------------------------------
>>
>>
>>
>> sebb wrote:
>>
>> > On 24/09/06, Philip Peake <[EMAIL PROTECTED]> wrote:
>> >
>> >> Thanks for pointing out that the ${VAR} variables are pre-processed.
>> >> So I tried this:
>> >>
>> >> s=vars.get("FOO");
>> >> print(s);
>> >>
>> >> It print out:
>> >>
>> >> null
>> >
>> >
>> > i.e. FOO is not defined as a variable
>> >
>> >> I also tried:
>> >>
>> >> s=${FOO};
>> >> print(s);
>> >>
>> >> Which gave:
>> >>
>> >> 2006/09/24 13:48:06 ERROR - jmeter.util.BeanShellInterpreter:
>> Error
>> >> invoking bsh method eval
>> >> java.lang.reflect.InvocationTargetException
>> >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> Method)
>> >> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
>> Source)
>> >> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>> >> Source)
>> >> at java.lang.reflect.Method.invoke(Unknown Source)
>> >> at
>> >>
>> >>
>>
org.apache.jmeter.util.BeanShellInterpreter.bshInvoke(BeanShellInterpreter.java:150)
>>
>> >>
>> >> at
>> >>
>> >>
>>
org.apache.jmeter.util.BeanShellInterpreter.eval(BeanShellInterpreter.java:186)
>>
>> >>
>> >> at
>> >>
>> >>
>>
org.apache.jmeter.extractor.BeanShellPostProcessor.process(BeanShellPostProcessor.java:80)
>>
>> >>
>> >> at
>> >>
>> >>
>>
org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:428)
>>
>> >>
>> >> at
>> >> org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)
>> >> at java.lang.Thread.run(Unknown Source)
>> >> Caused by: Sourced file: inline evaluation of: ``s=${FOO};
>> print(s);
>> >> ;'' : Attempt to access property on undefined variable or
>> class name
>> >> : at Line: 1 : in file: inline evaluation of: ``s=${FOO};
>> print(s);
>> >> ;'' : {
>> >
>> >
>> > ditto
>> >
>> >> And finally, I tried:
>> >>
>> >> print("${FOO}");
>> >>
>> >> Which printed:
>> >>
>> >> ${FOO}
>> >
>> >
>> > ditto
>> >
>> >> I still don't see how to do this ....
>> >>
>> >
>> > The above is correct, but the variable is not defined.
>> >
>> > ---------------------------------------------------------------------
>> > 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]
---------------------------------------------------------------------
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]