猿问

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

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

测试计划

首先 Jssr 预处理创建随机名称以用作变量。

http://img.mukewang.com/61a71b270001c03105750065.jpg

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

http://img3.mukewang.com/61a71b360001d44a03630076.jpg

尝试在不同的线程中调用列表指针 t_${offer_list_rand} 并尝试向列表添加值

http://img1.mukewang.com/61a71b430001c28004380071.jpg

控制台异常


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]

如您所见,创建的 offer_list_rand 变量

http://img3.mukewang.com/61a71b590001427901850031.jpg

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


蛊毒传说
浏览 182回答 3
3回答

吃鸡游戏

根据JMeter 的最佳实践,使用vars.getinside script 而不是${}: props.put("t_" + vars.get("offer_list_rand"),offer_list);

慕容708150

你在做一些奇怪的事情您的 Groovy 脚本将无法工作,因为您不能将offer_list_rand变量引用为${offer_list_rand},请考虑在 Groovy 脚本中使用Parameters任何JMeter 函数和/或变量引用的部分您的方法将不起作用,因为第二个线程组对${offer_list_rand}变量值一无所知,因为 JMeter 变量是线程组的本地变量。从技术上讲,您可以将 JMeter 属性命名为 JMeter 变量,例如:vars.put('offer_list_rand', 'foo') props.put('offer_list_rand', 'bar')并且您将拥有具有不同值的不同对象,该变量将foo在定义它的线程组中可见,并且该属性将对bar整个 JVM 可见,直到您关闭或重新启动 JMeter。使用 JMeter 内置测试元素(或插件)而不是编写脚本总是更快/更容易/更好,特别是在您的情况下,您可以轻松使用__setProperty()函数或线程间通信插件,甚至移动您的逻辑从 setUp 线程组进入普通线程组,并使用只有一次控制器或如果控制器使其仅运行一次

冉冉说

重新检查后,这是解决方案。在我放置的 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");
随时随地看视频慕课网APP

相关分类

Java
我要回答