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]