为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Jmeter 中创建随机列表名称并在不同线程中使用 - Jmeter

如何在 Jmeter 中创建随机列表名称并在不同线程中使用 - Jmeter

蛊毒传说 2021-12-01 14:49:33
我有一个关于 Jmeter 全局变量的问题。我想在第一个线程中创建一个列表,并在所有线程中使用该列表。由于它是全局的,我希望每次运行测试计划时,字符串名称都会获得新值。我创建了一个生成唯一名称的函数,但是当我尝试在第二个线程中调用它时,它不知道变量的名称。测试计划首先 Jssr 预处理创建随机名称以用作变量。我放置值的采样器,并保存全局变量 t_${offer_list_rand},它将指向列表尝试在不同的线程中调用列表指针 t_${offer_list_rand} 并尝试向列表添加值控制台异常Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: offer_list_rand for class: Script30javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: offer_list_rand for class: Script30    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324) ~[groovy-all-2.4.15.jar:2.4.15]    at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.15.jar:2.4.15]    at javax.script.CompiledScript.eval(CompiledScript.java:92) ~[?:1.8.0_65]    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:221) ~[ApacheJMeter_core.jar:5.0 r1840935]    at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:71) [ApacheJMeter_java.jar:5.0 r1840935]    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622) [ApacheJMeter_core.jar:5.0 r1840935]    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546) [ApacheJMeter_core.jar:5.0 r1840935]    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.0 r1840935]    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.0 r1840935]    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_65]如您所见,创建的 offer_list_rand 变量我只想创建一个名称列表,每次运行测试计划时都会随机分配该名称,并从不同的线程调用它。有人可以建议吗?
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

根据JMeter 的最佳实践,使用vars.getinside script 而不是${}

 props.put("t_" + vars.get("offer_list_rand"),offer_list);


查看完整回答
反对 回复 2021-12-01
?
慕容708150

TA贡献1831条经验 获得超4个赞

你在做一些奇怪的事情

  1. 您的 Groovy 脚本将无法工作,因为您不能将offer_list_rand变量引用为${offer_list_rand},请考虑在 Groovy 脚本中使用Parameters任何JMeter 函数和/或变量引用的部分

  2. 您的方法将不起作用,因为第二个线程组${offer_list_rand}变量值一无所知,因为 JMeter 变量是线程组的本地变量。从技术上讲,您可以将 JMeter 属性命名为 JMeter 变量,例如:

    vars.put('offer_list_rand', 'foo')
    props.put('offer_list_rand', 'bar')

    并且您将拥有具有不同值的不同对象,该变量将foo在定义它的线程组中可见,并且该属性将对bar整个 JVM 可见,直到您关闭或重新启动 JMeter。

  3. 使用 JMeter 内置测试元素(或插件)而不是编写脚本总是更快/更容易/更好,特别是在您的情况下,您可以轻松使用__setProperty()函数或线程间通信插件,甚至移动您的逻辑从 setUp 线程组进入普通线程组,并使用只有一次控制器如果控制器使其仅运行一次


查看完整回答
反对 回复 2021-12-01
?
冉冉说

TA贡献1877条经验 获得超1个赞

重新检查后,这是解决方案。在我放置的 Jssr 预处理器中


String list_rand = list_obj.get_random_list_name("temp_");

props.put('list_rand',list_rand);

在我放的处理器中


List<String> list2 = new ArrayList<String>();


props.put('list_rand_'+ props.get('list_rand'),list2);

当我想在其他线程组中调用它时,我使用了


List<String> myList = props.get('list_rand'+ props.get('list_rand'));



myList.add("333");


查看完整回答
反对 回复 2021-12-01
  • 3 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信