首页 > 解决方案 > 如何在 Jmeter 中创建随机列表名称并在不同线程中使用 - Jmeter

问题描述

我对 Jmeter 中的全局变量有疑问。我想在第一个线程中创建一个列表,并在所有线程中使用该列表。因为它是全局的,所以我希望每次运行测试计划时字符串名称都会获得新值。我创建了一个生成唯一名称的函数,但是当我尝试在第二个线程中调用它时,它不知道变量的名称。

测试计划 在此处输入图像描述

第一个 Jssr 预处理以创建随机名称以用作变量。 在此处输入图像描述

  1. 我放置值的采样器,并保存全局变量 t_${offer_list_rand},它将指向列表

在此处输入图像描述

  1. 尝试在不同的线程中调用列表指针 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: Script30
javax.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]
Caused by: groovy.lang.MissingPropertyException: No such property: offer_list_rand for class: Script30
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:66) ~[groovy-all-2.4.15.jar:2.4.15]
    at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:51) ~[groovy-all-2.4.15.jar:2.4.15]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:310) ~[groovy-all-2.4.15.jar:2.4.15]
    at Script30.run(Script30.groovy:1) ~[?:?]
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:321) ~[groovy-all-2.4.15.jar:2.4.15]
    ... 9 more
  1. 如您所见,创建了 offer_list_rand 变量

在此处输入图像描述

我只想创建一个列表,其名称将在每次运行测试计划时随机化,并从不同的线程调用它。有人可以建议吗?

标签: javajmeter

解决方案


根据JMeter 的最佳实践,使用vars.get内部脚本而不是${}

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

推荐阅读