暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

jmeter web性能测试之用beanshell转换全局变量

IT那活儿 2021-11-18
1433

点击上方“IT那活儿”,关注后了解更多精彩内容!!!

背景

jmeter进行web性能测试,线程组内的变量只能在本线程组内被引用,但在遇到复杂的业务场景时,有时需要创建多个线程组,线程组之间需要共用变量,如登录操作生成的token,这样就需要将局部变量转换为全局变量,在不同线程组中共用。

jmeter将局部变量转换为全局变量,有两种方式,一种利用Beanshell PostProcessor(Beanshell后置处理器),一种利用Beanshell Sampler(Beanshell取样器)。


本例将登陆中获取的动态token,转换为全局变量,在其他线程组内使用。



    方式一


    利用BeanshellPostProcessor转换全局变量

    step1 添加Boundary Extractor (边界值提取器),获取动态token:

    边界值提取器和loadrunner中获取关联的左右边界值类似,在获取动态token值的请求上添加Boundary Extractor,填写左右边界值,提取动态token值。用正则表达式提取器也一样,这里用边界值提取器。
    • 添加Boundary Extractor:

    • 设置Boundary Extractor,获取动态token:

    step2 添加Beanshell PostProcessor,将局部变量token转换为全局变量。
    在token所在的线程组上添加Beanshell PostProcessor,在获取token的请求下添加也可以,本例在线程组上添加。
    • 添加Beanshell PostProcessor:

    • 利用__setProperty()函数转换:

    ${__setProperty(tokenG,${token},)}
    其中tokenG是转换成全局变量后的新的变量名称,将${token}的值赋给tokenG。
    step3 添加一个debug Sampler,验证一下是否能成功获取到token值。
    • 运行一下脚本,查看debug Sampler结果:

    step4 在其他线程组中引用该变量
    利用函数__P(),在其他线程组中就可以引用token值了。
    ${__P(tokenG,)}
    • 成功获取动态token值:


    方式二


    利用Beanshell Sampler转换全局变量
    step1 提取token值同上,添加Beanshell Sampler、转换函数同Beanshell PostProcessor类似。
    • 添加Beanshell Sampler:
    • 利用__setProperty()函数转换:

    step2 添加debug sampler验证
    step3 在其他线程组中引用
    Beanshell Sampler引用全局变量的函数和BeanshellPostProcesser不一样,利用函数__property()。
    ${__property(tokenG1)}
    • 成功获取动态token值:


    新手注意

    • __setProperty()、__P()、__property()前面的下划线是两个下划线,注意不要输入一个下划线,一个下划线函数引用是不成功的。
    • 善于利用打印的日志来排查问题,就是右上角的黄色三角号,运行时会实时打印日志,在排查问题时很有用。
    • 用函数助手生成Beanshell转换脚本时注意,jmeter5.3版本只有__property()函数,生成的转换函数是${__property(newname,${oldname})},直接复制到Beanshell脚本里是报错的。
    END

    更多精彩干货分享

    点击下方名片关注

    IT那活儿

    文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论