On 01/10/2008, Mark24 <[EMAIL PROTECTED]> wrote:
>
>
>  From my observations it looks like if a parameter is set to a variable in
>  BeanShell PostProcessor i.e. ${__setProperty(parameterName,variableName)},

That is setting a property, not a variable.

>  printing the parameterName value to console i.e.
>  print(${__P(parameterName)}) works as expected (if variableName was declared
>  in BeanShell as: String variableName = "mary had a little lamb", it would
>  print "mary had a little lamb").
>
>  However, in BeanShell PostProcessor in a separate ThreadGroup
>  print(${__P(parameterName)}) causes an error because variableName doesn't
>  exist (not in scope I guess).

Properties *are* shared between threadgroups - they are global to the
JVM, so there must be an error in the test plan.

>  Setting parameterName to a literal eg. "quick brown fox" prints as expected
>  in both ThreadGroups.
>
>  I've come to the conclusion that ${__P(parameterName)} evaluates to the
>  variable variableName (parameterName is a pointer to the variable perhaps?)

No, it evaluates the property named parameterName - properties are not
the same as variables in JMeter:

http://jakarta.apache.org/jmeter/usermanual/test_plan.html#properties

>  and works in the initial ThreadGroup as variableName is within scope
>  containing value "mary had a little lamb" but doesn't work in the second
>  ThreadGroup as variableName is out now out of scope.

Must be a bug in the test plan

>  In a nutshell this is what I think is happening ("a <- b" means a request
>  value from b):
>
>
>  Initial ThreadGroup:
>  ${__P(parameterName)}  <- variableName <-  "mary had a little lamb"

I assume you mean propertyName.

>  Second ThreadGroup:
>  ${__P(parameterName)}  <- variableName <-  !!Error, variableName doesn't
>  exist here!!
>

I assume you mean propertyName.

>
>  This has really got me snookered passing values between ThreadGroups; I
>  don't have an initialisation file so it must be my code which is incorrect:

Yes, it is.

>  ThreadGroup1's
>
> ${__setProperty(securityid,bsh.args[0],true)};
>

Which will set the property "securityid" to the value "bsh.args[0]"
and return the value "bsh.args[0[".

If this is executed in a BeanShell script, the script will see the
value of the function call - i.e. "bsh.args[0]" - which is a BeanShell
variable that is defined if the parameter is defined.

So the script:

print(${__setProperty(securityid,bsh.args[0],true)});

is passed to BeanShell as

print(bsh.args[0]);

>
> Or
>
>  ThreadGroup2's
>  ${__P(securityid)};
>

Looks OK; it will return "bsh.args[0]".

>
>  Thanks guys,
>
> Mark
>
>
>
>
>  sebb-2-2 wrote:
>  >
>  > On 29/09/2008, Mark24 <[EMAIL PROTECTED]> wrote:
>  >>
>  >>  Thanks Sebb. I've tried your suggestions but had hit another snag:
>  >>
>  >>  I call Jmeter at the command window by "Jmeter -Jsecurityid=123" to
>  >> create a
>  >>  parameter securityid with default value "123".
>  >>
>  >>
>  >>  + Test Plan
>  >>  ++ Thread Group1
>  >>  +++ WebService(SOAP) Request1
>  >>  ++++ XPath Extractor
>  >>  ++++ BeanShell PostProcessor1
>  >>
>  >>  ++ Thread Group2
>  >>  +++ WebService(SOAP) Request2
>  >>  ++++ BeanShell PostProcessor2
>  >>
>  >>
>  >>  In Thread Group1, XPath Extractor I set:
>  >>  - Reference Name = theSID
>  >>  - Xpath query = //sid
>  >>  - Default Value = "nomatchfound"
>  >>
>  >>  In Thread Group1, BeanShell PostProcessor1 I set:
>  >>  - Reset Interpreter = False
>  >>  - Parameters = ${theSID}
>  >>  - Script = ${__setProperty(securityid,bsh.args[0],true)};
>  >>  print(${__P(securityid)});
>  >>
>  >>
>  >>  In Thread Group2, BeanShell PostProcessor2 I set:
>  >>  - Reset Interpreter = False
>  >>  - Parameters =
>  >>  - Script = print(${__P(securityid)});
>  >>
>  >>
>  >>  I run this Test Plan, it extracts //sid (say, "123456", sets securityid
>  >> to
>  >>  "123456" and prints to console "123456" in BeanShell PostProcessor1, but
>  >> in
>  >>  Thread Group2's BeanShell PostProcessor2 it doesn't print to console but
>  >>  instead logs an error in jmeter.log mentioning "Error invoking bsh
>  >> method:
>  >>  eval Sourced file: inline evaluation of: ''print(bsh.args[0]);''"
>  >>
>  >>
>  >>  I expect print(${__P(securityid)}); in BeanShell PostProcessor2 to print
>  >>  "123456" but is looks like it is evaluating bsh.args[0] and because it
>  >>  doesn't exist here it errors out.
>  >>
>  >>  What am i doing wrong?
>  >
>  > Neither JMeter nor BeanShell will add ''print(bsh.args[0]);'' to the
>  > script by themselves, so there must be an error in your BeanShell
>  > script - or perhaps initialisation file.
>  >
>  >>
>  >>
>  >>
>  >>
>  >>  sebb-2-2 wrote:
>  >>  >
>  >>  > On 26/09/2008, Mark24 <[EMAIL PROTECTED]> wrote:
>  >>  >>
>  >>  >>  Thanks for your reply sebb, you are very informative (i've been
>  >> reading
>  >>  >> your
>  >>  >>  answer to questions quite often over the last 3 days ive been using
>  >>  >> JMeter).
>  >>  >>
>  >>  >>  My grand plan is to regression test my company's MS web services by
>  >>  >> loging
>  >>  >>  in once to get the security id, then spawn multiple virtual users to
>  >>  >> work
>  >>  >>  together to call the other WS methods using a collection of inputs
>  >> from
>  >>  >> a
>  >>  >>  database. certain values from the responses are planned to be
>  >> inserted
>  >>  >> into
>  >>  >>  a database to later run some sql to compare these values against a
>  >> test
>  >>  >>  baseline database.
>  >>  >>
>  >>  >>  I was using one thread group which was spawning a single user to to
>  >> get
>  >>  >> the
>  >>  >>  security id, then the second thread group would spawn n virtual
>  >> users.
>  >>  >>
>  >>  >
>  >>  > OK, it was not clear that you wanted to use a single id in multiple
>  >>  > threads.
>  >>  >
>  >>  > In which case, use two thread groups, and set them to run one after
>  >>  > another.
>  >>  >
>  >>  > Extract the id you want to use, and save it as a JMeter Property using
>  >>  > the function:
>  >>  >
>  >>  >
>  >> http://jakarta.apache.org/jmeter/usermanual/functions.html#__setProperty
>  >>  >
>  >>  > You can then use the __P() function to retrieve the value in the
>  >>  > second thread group.
>  >>  >
>  >>  > Or if you already have a lot of samplers using a variable, just add a
>  >>  > user parameters pre-processor to the first one and copy the property
>  >>  > to the variable there.
>  >>  >
>  >>  >>  I'm possibly approaching the solution to my problem incorrectly so
>  >>  >> please
>  >>  >>  comment or point me to some reading material. My Jmeter textbook has
>  >>  >> been
>  >>  >>  order on Amazon but until then, the jmeter docs and forums like this
>  >> are
>  >>  >> my
>  >>  >>  friends.
>  >>  >
>  >>  > There's also quite a lot of information on the Wiki.
>  >>  >
>  >>  >>  Thanks again Sebb,
>  >>  >>
>  >>  >>  Mark
>  >>  >>
>  >>  >>
>  >>  >>  sebb-2-2 wrote:
>  >>  >>  >
>  >>  >>  > On 26/09/2008, Mark24 <[EMAIL PROTECTED]> wrote:
>  >>  >>  >>
>  >>  >>  >>  In Jmeter 2.3.2, how do I pass a value obtained in "Thread Group
>  >> 1"
>  >>  >>  >> (with
>  >>  >>  >>  "XPath Extractor" from a "WebService(SOAP) Request") to "Thread
>  >>  >> Group 2"
>  >>  >>  >> for
>  >>  >>  >>  use as input to "WebService(SOAP) Request"
>  >>  >>  >>
>  >>  >>  >>  Graphically:
>  >>  >>  >>
>  >>  >>  >>  "Thread Group 1"
>  >>  >>  >>    "WebService(SOAP) Request"  //login() WS method which returns
>  >> a
>  >>  >>  >> security
>  >>  >>  >>  ID
>  >>  >>  >>    "XPath Extractor"  //extract security ID to security_ID
>  >> variable
>  >>  >>  >>  "Thread Group 2"
>  >>  >>  >>    "WebService(SOAP) Request"  //use ${security_ID} as a
>  >> parameter to
>  >>  >>  >> this
>  >>  >>  >>  Search() WS method
>  >>  >>  >>
>  >>  >>  >>
>  >>  >>  >>  Variable security_ID declared in "Thread Group 1"'s "XPath
>  >>  >> Extractor"
>  >>  >>  >> seems
>  >>  >>  >>  to be very narrowly scoped as "${security_ID}" is literally used
>  >> as
>  >>  >>  >> input to
>  >>  >>  >>  "Thread Group 2"'s "WebService(SOAP) Request" instead of the
>  >> value
>  >>  >> of
>  >>  >>  >>  ${security_ID}.
>  >>  >>  >>
>  >>  >>  >>  I've tried declaring the security_ID variable in "Test Plan to
>  >> use"
>  >>  >> but
>  >>  >>  >> this
>  >>  >>  >>  doesn't work (${security_ID} resolves to the value i set during
>  >>  >>  >> declaration
>  >>  >>  >>  instead of the extracted value).
>  >>  >>  >
>  >>  >>  > Why not use the same Thread Group for the two SOAP requests?
>  >>  >>  >
>  >>  >>  > e.g.
>  >>  >>  >
>  >>  >>  > Thread Group
>  >>  >>  > + SOAP
>  >>  >>  > + + XPath
>  >>  >>  > + SOAP using variable
>  >>  >>  >
>  >>  >>  > If you want to run multiple requests with the same variable, just
>  >> add
>  >>  >>  > them at the end, or enclose in a loop:
>  >>  >>  >
>  >>  >>  > Thread Group
>  >>  >>  > + SOAP
>  >>  >>  > + + XPath
>  >>  >>  > + Loop
>  >>  >>  > + + SOAP using variable
>  >>  >>  >
>  >>  >>  >>  Thanks for any help,
>  >>  >>  >>  Mark
>  >>  >>  >>
>  >>  >>  >>
>  >>  >>  >>  --
>  >>  >>  >>  View this message in context:
>  >>  >>  >>
>  >>  >>
>  >> 
> http://www.nabble.com/how-do-I-pass-a-value-obtained-in-%22Thread-Group-1%22-%28with-%22XPath-Extractor%22-from-a-%22WebService%28SOAP%29-Request%22%29-to-%22Thread-Group-2%22-for-use-as-input-to-%22WebService%28SOAP%29-Request%22-tp19683794p19683794.html
>  >>  >>  >>  Sent from the JMeter - User mailing list archive at Nabble.com.
>  >>  >>  >>
>  >>  >>  >>
>  >>  >>  >>
>  >>  >> ---------------------------------------------------------------------
>  >>  >>  >>  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]
>  >>  >>  >
>  >>  >>  >
>  >>  >>  >
>  >>  >>
>  >>  >>
>  >>  >> --
>  >>  >>  View this message in context:
>  >>  >>
>  >> 
> http://www.nabble.com/how-do-I-pass-a-value-obtained-in-%22Thread-Group-1%22-%28with-%22XPath-Extractor%22-from-a-%22WebService%28SOAP%29-Request%22%29-to-%22Thread-Group-2%22-for-use-as-input-to-%22WebService%28SOAP%29-Request%22-tp19683794p19686226.html
>  >>  >>
>  >>  >> Sent from the JMeter - User mailing list archive at Nabble.com.
>  >>  >>
>  >>  >>
>  >>  >>
>  >> ---------------------------------------------------------------------
>  >>  >>  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]
>  >>  >
>  >>  >
>  >>  >
>  >>
>  >>  --
>  >>
>  >> View this message in context:
>  >> 
> http://www.nabble.com/how-do-I-pass-a-value-obtained-in-%22Thread-Group-1%22-%28with-%22XPath-Extractor%22-from-a-%22WebService%28SOAP%29-Request%22%29-to-%22Thread-Group-2%22-for-use-as-input-to-%22WebService%28SOAP%29-Request%22-tp19683794p19718151.html
>  >>
>  >> Sent from the JMeter - User mailing list archive at Nabble.com.
>  >>
>  >>
>  >>  ---------------------------------------------------------------------
>  >>  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]
>  >
>  >
>  >
>
>  --
>
> View this message in context: 
> http://www.nabble.com/how-do-I-pass-a-value-obtained-in-%22Thread-Group-1%22-%28with-%22XPath-Extractor%22-from-a-%22WebService%28SOAP%29-Request%22%29-to-%22Thread-Group-2%22-for-use-as-input-to-%22WebService%28SOAP%29-Request%22-tp19683794p19753696.html
>
> Sent from the JMeter - User mailing list archive at Nabble.com.
>
>
>  ---------------------------------------------------------------------
>  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