Performance 使用beanshell脚本在jmeter中的线程之间共享哈希映射

Performance 使用beanshell脚本在jmeter中的线程之间共享哈希映射,performance,jmeter,share,beanshell,Performance,Jmeter,Share,Beanshell,J meter脚本包含两个线程。线程01是一个设置线程,它在执行测试线程2之前循环“n”次。 我已经在两个线程中实现了两个beanshell处理器,并包含以下代码 线程01:(设置线程)>>使用过的Beanshell后处理器 String mapKey=vars.get("count_id"); String refresh_Token = vars.get("refreshToken"); Map refreshCodeMap = new HashMap(); refreshCodeMap.p

J meter脚本包含两个线程。线程01是一个设置线程,它在执行测试线程2之前循环“n”次。 我已经在两个线程中实现了两个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:(测试)>>使用过的beanshell预处理器

String count_id=vars.get("count_id");
Map refreshCodeMap = bsh.shared.refreshCodeMap;
log.info(count_id);
log.info(refreshCodeMap.get(count_id));
但在线程o1中,输出如下所示

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
在这里,define hashmap是线程1执行的每个循环中的get overrite。因此,哈希映射只包含最后一个循环执行数据。我需要分配在线程01执行中创建的所有值,并在线程2中获取它们。
有什么建议吗?

首先要知道。Groovy中没有
bsh.shared
命名空间,但是您可以使用它来实现相同的功能,它可以用于在线程和线程组之间传递变量

  • 在第一个线程组中:

    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)
    
    def count_id=vars.get('count_id')
    def refreshCodeMap = props.get('refreshCodeMap')
    log.info(count_id)
    log.info(refreshCodeMap.get(count_id))
    
  • 在第二个线程组中:

    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)
    
    def count_id=vars.get('count_id')
    def refreshCodeMap = props.get('refreshCodeMap')
    log.info(count_id)
    log.info(refreshCodeMap.get(count_id))
    
  • 演示:


    谢谢。我用beanshell脚本尝试了这一点,并在测试计划和共享中定义了哈希映射。我的jmeter版本是3.3。但一旦我重新启动jmeter并执行测试,我就会间歇性地出错。[1]