Ban on!!! Thanks a lot Felix for your clear explanation! Solved all my confusions.
Thanks! On Mon, Sep 5, 2022 at 6:27 AM Felix Schumacher < felix.schumac...@internetallee.de> wrote: > Another important difference here (assuming this is groovy code in a > jsr223 script), you are assigning Groovy variables, but __evalVar works on > JMeter variables. > > To set a JMeter variable from within Groovy code, use vars.put("name", > value). > > And to reiterate: Don't confuse ${...} from JMeter with the one from > Groovy. JMeter will try to replace the ${...} stuff on first run (as Dmitri > wrote). > > JMeter has a fallback mechanism, if it doesn't find a variable in its own > namespace, that the expression will be used unchanged. In the case of a > more complex expression, the result depends on the function. > > In your case: > > * ${query} (with no JMeter variable named "query") will result in > ${query}, which is then interpreted by Groovy and accesses the Groovy > variable "query". > > * The complex expression ${__evalVar(query)} will result in an empty > string (as can be tested in the function helper dialog). (Groovy sees > log.info('==')) > > Felix > Am 05.09.22 um 09:05 schrieb Dmitri T: > > 1. You don't need to use __evalVar() function in Groovy, in general > inlining JMeter Functions and Variables into scripts is not the best > idea as only first occurrence will be cached > > <https://jmeter.apache.org/usermanual/component_reference.html#JSR223_Sampler> > <https://jmeter.apache.org/usermanual/component_reference.html#JSR223_Sampler> > so you will have the same query for all iterations even if the > values will be changing. > 2. If you want to utilize Groovy's string interpolation > <https://groovy-lang.org/syntax.html#_string_interpolation> > <https://groovy-lang.org/syntax.html#_string_interpolation> feature > you need to use double quotation marks > <https://groovy-lang.org/syntax.html#_double_quoted_string> > <https://groovy-lang.org/syntax.html#_double_quoted_string> like > "select ${column} from ${table}" > 3. "column" and "table" variables need to be defined *before* declaring > the "query" variable > > > Suggested code change: > > > column="name" > table="customers" > query="select ${column}from ${table}" > log.info("${query}") > > > More information on Groovy scripting in JMeter - Apache Groovy: What Is > Groovy Used For? <https://www.blazemeter.com/blog/apache-groovy> > <https://www.blazemeter.com/blog/apache-groovy> > > > On 9/4/2022 10:31 PM, Tong Sun wrote: > > Hi, > > Fromhttps://jmeter.apache.org/usermanual/functions.html#__evalVar > > __evalVar > > The evalVar function returns the result of evaluating an expression stored > in a variable. > > This allows one to read a string from a file, and process any variable > references in it. For example, if the variable "query" contains "select > ${column} from ${table}" and "column" and "table" contain "name" and " > customers", then ${__evalVar(query)} will evaluate as "select name from > customers". > > However, I tried it (in JM5.5), but wasn't able to make it work: > > query = '''select ${column} from ${table}''' > column = "name" > table = "customers" > > log.info("${query}") > log.info('=${__evalVar(query)}=') > > > but the output I got is: > > select ${column} from ${table}== > How to make it work please? > >