是否可以在 JMeter 中添加对象引用用户定义的变量?

时间:2021-06-22 21:48:41

标签: jmeter

我可以看到用户定义的变量只能用字符串值填充变量。有没有办法在用户定义变量元素中填充对象引用用户定义变量。

我尝试过将 UDV 值设为 ${__groovy(new java.util.concurrent.ConcurrentHashMap())} 之类的东西。但是这种方式会导致稍后从变量中检索到一些字符串。 我什至尝试使用用户定义变量 groovy 脚本(如 ${__groovy(vars.putObject("key", new java.util.concurrent.ConcurrentHashMap(); "assigned")})的副作用。但是这个会导致一些 JMeter 编译错误,而在我看来,它在语法上是不错的 groovy 脚本。 我曾尝试使用脚本预处理器放在测试计划之上,就像建议的 SO 答案之一一样,但它们在树中的每个采样器之前工作,因此不符合预期。

在测试计划初始化阶段,我仍然找不到在 JMeter 中初始化对象引用变量的方法,从而劫持了初始化 UDV 的线程。

我知道在脚本元素(如 JSR223/BeanShell/其他一些采样器/预处理器等)中使用 putObject(<key>, <reference value>) 填充变量的可能性。 但是我想在测试计划的初始化时为我的所有线程组填充变量,以避免使用道具对每个 put/get 调用施加同步锁惩罚。并且不可能在测试计划的顶部添加采样器。

EDIT 在接受 Dmitri T 的正确答案后(对于那些想立即以更清晰的形式知道答案的人):

${__groovy(vars.putObject("<key>"\, new HashMap()); "virtually anything")}

是在 UDV 测试计划元素中填充对象引用变量的正确(虽然是间接的)方法。

1 个答案:

答案 0 :(得分:1)

<块引用>

虽然在我看来是语法上不错的 groovy 脚本。

这只是你的意见,看看jmeter.log file,你会在那里看到解释错误

根据JMeter Documentation

<块引用>

如果函数参数包含逗号,那么一定要用“\将其转义,否则 JMeter 会将其视为参数分隔符。例如:

${__time(EEE\, d MMM yyyy)}

正确的语法如下:

${__groovy(vars.putObject('key'\,new java.util.concurrent.ConcurrentHashMap()),)}

演示:

enter image description here

更多信息:Apache JMeter Functions - An Introduction