jmeter - 是否可以在 JMeter 中添加对象引用用户定义的变量?
问题描述
我可以看到用户定义的变量只能用字符串值填充变量。有没有办法在用户定义的变量元素中填充对象引用用户定义的变量。
我曾尝试将 UDV 值设为${__groovy(new java.util.concurrent.ConcurrentHashMap())}
. 但是这种方式会导致稍后从变量中检索到一些字符串。我什至尝试使用用户定义变量 groovy 脚本的副作用,例如${__groovy(vars.putObject("key", new java.util.concurrent.ConcurrentHashMap(); "assigned")}
. 但是在我看来,这会导致一些 JMeter 编译错误,同时在语法上是好的 groovy 脚本。我曾尝试使用脚本预处理器放在测试计划之上,就像建议的 SO 答案之一,但它们在树中的每个采样器之前工作,因此不符合预期。
在测试计划初始化阶段劫持线程初始化 UDV 时,我仍然找不到在 JMeter 中初始化对象引用变量的方法。
我知道putObject(<key>, <reference value>)
在脚本元素(如 JSR223/BeanShell/其他一些采样器/预处理器等)中填充变量的可能性。但我想在测试计划的初始化时为所有线程组填充变量以避免使用道具对每个 put/get 调用施加同步锁定惩罚。并且不可能在测试计划的顶部添加采样器。
在接受 Dmitri T 的正确答案后进行编辑(对于那些想立即以更清晰的形式知道答案的人):
${__groovy(vars.putObject("<key>"\, new HashMap()); "virtually anything")}
在 UDV 测试计划元素中填充对象引用变量是正确的(虽然是间接的)方法。
解决方案
在我看来,虽然在语法上是好的 groovy 脚本。
这只是您的意见,请查看jmeter.log 文件,您会在那里看到解释错误
根据JMeter 文档:
如果函数参数包含逗号,请务必使用 "
\
"对其进行转义,否则 JMeter 会将其视为参数分隔符。例如:${__time(EEE\, d MMM yyyy)}
正确的语法类似于:
${__groovy(vars.putObject('key'\,new java.util.concurrent.ConcurrentHashMap()),)}
演示:
推荐阅读
- xamarin - 使用页面转换的 Xamarin 表单
- laravel - 如何在 laravl 的 requette 控制器上添加条件
- rust - 如何使`Button`s小于它们的最小尺寸?
- android - 如何找到依赖项的 gradle 实现路径?
- pointers - golang 中嵌入类型的内部状态 - 它是如何工作的?
- elasticsearch - Kibana unabe 在 Windows 上连接到 elasticsearch
- xamarin - xamarin 表单属性/首选项最大推荐字符串长度
- google-search-console - 如何修复解析错误:Osclass 免费分类上缺少“}”或对象成员名称
- sql-server - 计算列值相对于最大行值占一行的所有列的百分比
- flutter - 颤振:没有为类“标记”定义吸气剂“选项”