Groovy JMeter函数和变量

Groovy JMeter函数和变量,groovy,jmeter,jsr223,Groovy,Jmeter,Jsr223,我是JMeter的新手,所以这个问题听起来可能非常愚蠢 我有一个循环,在这个循环中,每次迭代都会更改一个变量(比如说它被称为“raw”)并将其写入文件。变量包含HTML编码的文本,因此必须将其转换为纯文本。我发现这可以通过\uuu unescapeHtml函数来实现。当我尝试使用它时,效果很好,但最终我总是收到与第一次迭代相同的文本。然后我了解到我必须使用vars.get而不是${}来访问变量。因此,我将${{uu-unescapethtml(${raw}”)}更改为${uu-unescapet

我是JMeter的新手,所以这个问题听起来可能非常愚蠢

我有一个循环,在这个循环中,每次迭代都会更改一个变量(比如说它被称为“raw”)并将其写入文件。变量包含HTML编码的文本,因此必须将其转换为纯文本。我发现这可以通过
\uuu unescapeHtml
函数来实现。当我尝试使用它时,效果很好,但最终我总是收到与第一次迭代相同的文本。然后我了解到我必须使用
vars.get
而不是
${}
来访问变量。因此,我将
${{uu-unescapethtml(${raw}”)}
更改为
${uu-unescapethtml(vars.get(“raw”)}
哪种帮助:
vars.get
每次迭代都会获得
raw
的新值,但是
\uuuUnescapeTHTML
现在根本不起作用-它只是从
raw
返回编码文本。我没有成功找到任何关于这个确切问题的信息,所以我有点卡住了。

最终使用了

import org.apache.commons.lang3.StringEscapeUtils

...

StringEscapeUtils.unescapeHtml4(vars.get("raw"))

我不知道这是否是一个好方法,但至少它是有效的。

我假设您在JSR-223采样器或类似的上下文中使用表达式
${…}
。这些状态表示,这些脚本可以由JMeter缓存。这就是为什么您只能从第一次创建上下文时获取值的原因

对于像
${varname}
这样的简单变量求值,对于像
${{unescapethtml(…)}
这样的函数调用,情况也是如此

这里的解决方案是:

  • 不要在JSR-223上下文中使用可能被缓存的
    ${…}
  • 但是,您可以将这些表达式(
    ${…}
    )作为参数,通过JSR-223采样器上标记为
    parameters
    的输入传递到上下文中–同样假设您正在使用它
  • 通过使用
    StringEscapeUtils\unescapethml4