Thanks a lot sir, I really appreciate your help and your get-to-the-bottom attitude.
Wrapping the resolution in a groovy function is surely a useful trick that I'll be using a lot. Thanks again On Wed, Apr 3, 2024 at 6:10 AM Stuart Kenworthy <stuart.kenwor...@bjss.com.invalid> wrote: > Fix to my groovy call, I missed out a "_" > > -----Original Message----- > From: Stuart Kenworthy > Sent: Wednesday, April 3, 2024 11:10 AM > To: JMeter Users List <user@jmeter.apache.org> > Subject: RE: Iteration Number in JSR223 Groovy string > > I think the problem is, in certain circumstances when used in JMeter > components vars are only resolved on first read. From that point on JMeter > is using the resolved value, not the original function. > > The reason you get a 0 is if JMeter expects an integer in that space, it > represents null as 0. When it ran it initially the response was null, so > will forever return 0. > > One way of getting around this is to wrap the resolution in a groovy > function. > > ${__groovy( return vars.getObject("__jm__" + ctx.getThreadGroup.getName() > + "__idx)" )} > > Or something like, this will run the groovy code fresh each time it is > hit. Have a play about with it. I used vars.getObject() to return the > variable as its actual type because vars.get() in groovy always returns it > as a string. > > -----Original Message----- > From: Tong Sun <suntong...@gmail.com> > Sent: Tuesday, April 2, 2024 6:34 PM > To: Dmitri T <glin...@live.com> > Cc: JMeter Users List <user@jmeter.apache.org> > Subject: Re: Iteration Number in JSR223 Groovy string > > Thanks. > > So the root cause is: > > > ensure your script code does not use > > JMeter variables or JMeter function calls directly > > Having known that, I still don't quite understand why I'm getting zeros. > My actual groovy string is: > > "ThreadGroup: ${__threadNum}, Iteration Number: > ${__V(__jm__${__threadGroupName}__idx)}" > > Now, suppose `${__threadGroupName}` returns `My_TG`, then the > `${__V(__jm__${__threadGroupName}__idx)}` will become > `${__jm__My_TG__idx}`, right? Then why ${__threadNum} gives none zero, > while ${__jm__My_TG__idx} always gives zero pls? They are the same built-in > JMeter variables and should behave the same way, right? > > > > On Tue, Apr 2, 2024 at 1:09 PM Dmitri T <glin...@live.com> wrote: > > > Tong Sun wrote: > > > JMeter has a built-in variable ${__jm__Thread Group__idx} to > > > retrieve the current iteration, and I want to replace the `Thread > > > Group` using ${__threadGroupName}. So this comes natural to me: > > > > > > "Iteration Number is ${__V(__jm__${__threadGroupName}__idx)}" > > > > > > But when I try it, I always get "0". > > > > > > What's wrong with it and what's the fix pls? thx > > > > > It comes natural to you only. If you open JSR223 Sampler < > > https://jmeter.apache.org/usermanual/component_reference.html#JSR223_S > > ampler> > > > > documentation you will see something like: > > > > > The JSR223 test elements have a feature (compilation) that can > > > significantly increase performance. To benefit from this feature: > > > > > > * Use Script files instead of inlining them. This will make JMeter > > > compile them if this feature is available on ScriptEngine and > > > cache them. > > > * Or Use Script Text and check Cache compiled script if available > > > property. > > > When using this feature, ensure your script code does not use > > > JMeter variables or JMeter function calls directly in script code > > > as *caching would only cache first replacement*. Instead use > > > script parameters. > > > > > > > So either put the functions combination into "Parameters" section of > > your "script" and use it like > > > > "Iteration number is " + Parameters > > > > or go for code-based equivalent: > > > > "Iteration number is: " + vars.get('__jm__' + > > ctx.getThreadGroup().getName() + '__idx') > > > > Check out Top 8 JMeter Java Classes You Should Be Using with Groovy > > <https://www.blazemeter.com/blog/jmeter-java-classes> to learn what do > > these *vars* and *ctx* guys mean. > > > > > > The information included in this email and any files transmitted with it > may contain information that is confidential and it must not be used by, or > its contents or attachments copied or disclosed to, persons other than the > intended addressee. If you have received this email in error, please notify > BJSS. In the absence of written agreement to the contrary BJSS' relevant > standard terms of contract for any work to be undertaken will apply. Please > carry out virus or such other checks as you consider appropriate in respect > of this email. BJSS does not accept responsibility for any adverse effect > upon your system or data in relation to this email or any files transmitted > with it. BJSS Limited, a company registered in England and Wales (Company > Number 2777575), VAT Registration Number 613295452, Registered Office > Address, 1 Whitehall Quay, Leeds, LS1 4HR >