Tong Sun wrote:
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 <[email protected] <mailto:[email protected]>> 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_Sampler>

    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.

I have bad news for you, given you're not capable of understanding what does "caching would only cache first replacement." phrase means even with the help of online translation tools and LLM you won't last long in IT so you should consider switching to OnlyFans career right away.

I'll try to explain it using the simplest possible words:

 * Iteration 1: your function returns 0
 * Iteration 2: your function returns 0 as it was cached previously, it
   will not be re-evaluated
 * Iteration 3: your function returns 0 as it was cached previously


__threadNum() returns the number of the current thread which doesn't change across iterations

But it you use other function which generates i.e. timestamp, random string, UUID or whatever you will observe the same behaviour: the value generated in 1st iteration will be returned during subsequent iterations.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to