Как создать случайное имя списка в Jmeter и использовать в разных потоках - Jmeter - PullRequest
0 голосов
/ 21 октября 2018

У меня есть вопрос о глобальной переменной в Jmeter.Я хочу создать список в первой теме и использовать список во всех темах.поскольку он глобален, я хочу, чтобы при каждом запуске плана тестирования имя строки получало новое значение.Я создал функцию, которая генерирует уникальные имена, но когда я пытаюсь вызвать ее во втором потоке, он не знает имя переменной.

План тестирования enter image description here

Первый препроцесс Jssr для создания рандомизированного имени для использования в качестве переменной.enter image description here

сэмплер, в который я помещаю значение и сохраняю глобальную переменную t _ $ {offer_list_rand}, которая будет указывать на список

enter image description here

попробуйте в другом потоке вызвать указатель списка t _ $ {offer_list_rand} и попытаться добавить значение в список

enter image description here

исключение в консоли

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
Как вы можете видеть созданную переменную offer_list_rand

enter image description here

Я просто хочу создать список с именем, которое будет рандомизировано в каждомраз я запускаю план тестирования и вызываю его из другого потока.Может кто-нибудь посоветовать, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Вы делаете что-то странное

  1. Ваш скрипт Groovy не будет работать, так как вы не можете ссылаться на offer_list_rand переменную как ${offer_list_rand}, в дальнейшем рассмотрите возможность использования раздела Parameters для любого Функции и / или переменные JMeter ссылки внутри скриптов Groovy
  2. Ваш подход не будет работать, поскольку 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 () function или Inter-Thread Communication подключите или даже переместите свою логику в обычную группу потоков из группы потоков setUp и заставьте ее работать только один раз, используя Once Only Controller или Если контроллер
0 голосов
/ 24 октября 2018

После перепроверки это решение.в pre процессор 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");
0 голосов
/ 21 октября 2018

Согласно рекомендациям JMeter используйте vars.get внутри скрипта вместо ${}:

 props.put("t_" + vars.get("offer_list_rand"),offer_list);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...