Совместное использование хеш-карты между потоками в jmeter с помощью скриптов - PullRequest
0 голосов
/ 20 сентября 2019

J метровый скрипт содержит два потока.Поток 01 является потоком установки, и он выполняет цикл n раз перед выполнением потока 2, который является тестом.Я реализовал два процессора BeanShell в обоих потоках и включил следующий код:

Тема 01: (настройка потока) >> Использованный постпроцессор Beanshell

String mapKey=vars.get("count_id");
String refresh_Token = vars.get("refreshToken");
Map refreshCodeMap = new HashMap();
refreshCodeMap.put(mapKey,refresh_Token);

log.info(mapKey + "Map key");
log.info(refresh_Token + "refresh Token");  

bsh.shared.refreshCodeMap= refreshCodeMap;

Тема 02: (тест)>> используемый beanhell pre porocessor

String count_id=vars.get("count_id");
Map refreshCodeMap = bsh.shared.refreshCodeMap;
log.info(count_id);
log.info(refreshCodeMap.get(count_id));

Но в потоке o1 Out out выглядит следующим образом.

2019-09-20 08:41:57,194 INFO o.a.j.u.BeanShellTestElement: 1
2019-09-20 08:41:57,194 INFO o.a.j.u.BeanShellTestElement: null
2019-09-20 08:41:57,210 INFO o.a.j.u.BeanShellTestElement: 2
2019-09-20 08:41:57,211 INFO o.a.j.u.BeanShellTestElement: null
2019-09-20 08:41:57,224 INFO o.a.j.u.BeanShellTestElement: 3
2019-09-20 08:41:57,224 INFO o.a.j.u.BeanShellTestElement: null
2019-09-20 08:41:57,234 INFO o.a.j.u.BeanShellTestElement: 4
2019-09-20 08:41:57,234 INFO o.a.j.u.BeanShellTestElement: null
2019-09-20 08:41:57,243 INFO o.a.j.u.BeanShellTestElement: 5
2019-09-20 08:41:57,243 INFO o.a.j.u.BeanShellTestElement: null
2019-09-20 08:41:57,252 INFO o.a.j.u.BeanShellTestElement: 6
2019-09-20 08:41:57,253 INFO o.a.j.u.BeanShellTestElement: null
2019-09-20 08:41:57,260 INFO o.a.j.u.BeanShellTestElement: 7
2019-09-20 08:41:57,260 INFO o.a.j.u.BeanShellTestElement: null
2019-09-20 08:41:57,265 INFO o.a.j.u.BeanShellTestElement: 8
2019-09-20 08:41:57,265 INFO o.a.j.u.BeanShellTestElement: null
2019-09-20 08:41:57,270 INFO o.a.j.u.BeanShellTestElement: 9
2019-09-20 08:41:57,270 INFO o.a.j.u.BeanShellTestElement: null
2019-09-20 08:41:57,275 INFO o.a.j.u.BeanShellTestElement: 10
2019-09-20 08:41:57,275 INFO o.a.j.u.BeanShellTestElement: 2f889ccd-acfe-3345-bc68-21a52e71c8e2

Здесь определение hashmap - это переопределение get в каждом цикле при выполнении потока 1.Следовательно, хэш-карта содержит только данные последнего выполнения цикла.Мне нужно присвоить все значения, созданные в потоке 01 выполнения и получить их в потоке 2. Любое предложение?

1 Ответ

0 голосов
/ 20 сентября 2019

Прежде всего, имейте в виду, что начиная с JMeter 3.1, рекомендуется использовать JSR223 Test Elements и язык Groovy для сценариев .В Groovy нет пространства имен bsh.shared, однако вы можете добиться того же, используя props сокращение , которое можно использовать для передачи переменных между потоками и группами потоков.

  1. В первой группе потоков:

    def refreshCodeMap = new HashMap()
    if (props.get('refreshCodeMap') != null) {
        refreshCodeMap = props.get('refreshCodeMap')
    }
    
    refreshCodeMap.put(vars.get('count_id'),vars.get('refreshToken'))
    props.put('refreshCodeMap', refreshCodeMap)
    
  2. Во второй группе потоков:

    def count_id=vars.get('count_id')
    def refreshCodeMap = props.get('refreshCodeMap')
    log.info(count_id)
    log.info(refreshCodeMap.get(count_id))
    

Демо:

enter image description here

...