JMeter 函数和变量

JMeter functions and variables

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

我有一个循环,其中一个变量(假设它被称为 "raw")在每次迭代中被更改并写入文件。该变量包含 HTML 编码文本,因此必须将其转换为纯文本。我发现这可以使用 __unescapeHtml 函数来完成。当我尝试使用它时,它起作用了,但我最终总是收到与第一次迭代时相同的文本。然后我了解到我必须使用 vars.get 而不是 ${} 来访问变量。所以我将 ${__unescapeHtml("${raw}")} 更改为 ${__unescapeHtml(vars.get("raw")} 哪种方式有所帮助:vars.get 每次迭代都获得了 raw 的新值,但 __unescapeHtml 现在根本不起作用- 它只是 returns 来自 raw 的编码文本。我没有成功找到关于这个确切问题的任何信息,所以我有点卡住了。

最终使用

import org.apache.commons.lang3.StringEscapeUtils

...

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

不知道这样做是否是个好方法,但至少它有效。

我假设您在 JSR-223 采样器或类似上下文中使用表达式 ${...}user manual for JSR-223 Sampler 指出,这些脚本可以由 JMeter 缓存。这就是为什么您只能从第一次创建上下文时获取值。

对于像 ${varname} 这样的简单变量求值也是如此,对于像 ${__unescapeHtml(...)}.

这样的函数调用也是如此。

这里的解决方法是:

  • 不要在可能被缓存的 JSR-223 上下文中使用 ${...}
  • 然而,您可以将这些表达式 (${...}) 用作参数,通过 JSR-223 采样器上标记为 Parameters 的输入将它们传递到上下文中——再次假设您正在使用它.
  • 您可以使用您选择的 JSR-223 上下文为您提供的功能,正如您所做的那样,通过使用 StringEscapeUtils#unescapeHtml4