Jmeter学习-beanshell之登录跨线程处理

思路:

1.线程组1-登录成功
2.通过beanshell将获取的token放入全局属性中
3.在请求头中管理器中调用获取的token
4.跨线程组调用成功

实现:


1.登录线程组:

 登录成功的响应结果

2.通过beanshell将获取的token放入全局属性中

BeanShell 后置处理程序,对相应结果使用java语言进行处理或提取值。

我们先来看看这个 BeanShell 后置处理程序长得是啥样子,
路径:线程组 > http取样器> 后置处理器 > BeanShell 后置处理程序

//导入jar包
import org.json.*;

//获取请求返回值,赋予字符串变量

String response = prev.getResponseDataAsString();

//将string的值转换成jsonobject对象;
JSONObject data_obj = new JSONObject(response);

//获取json中token的值
String token = data_obj.get("token").toString();

//拼接下个请求需要的字符串 JWT token
String Authorization ="JWT "+token;

//vars.put("token",Authourization);
//token = vars.get("token");
//log.info("=======token=========");
//log.info(token);

//放入全局属性
props.put("Authorization",Authorization);
//token = props.get("token");
//log.info("=======token=========");
//log.info(token);

2.1 导包注意事项 

因为这段代码用到了json的包,所以要先将包引用进来,引用jar包的两种方式:

方式1:在测试计划中“添加目录或jar包到ClassPath”中选取需要的jar包

方式2:将jar包放到jmeter的lib目录中的ext目录中

 注意:方式2加载成功后,需要重启jmeter

2.2 vars和props 的区别

vars和props都是jmeter的内置变量,且本质都是Map类型
用python语言来理解的话,就是字典格式

最主要两点的区别:
vars 只能在当前线程组内使用,props 可以跨线程组使用
vars 只能保持String 或者Objec, props 是 Hashtable 对象

2.2.1 因为要实现跨线程组使用,所以这里使用 props将获取的值放入全局属性

props.put("Authorization",Authorization);

设置成功了,可在属性显示中查看: 

3.请求头中获取token值

3.1 如果要在非beanshell里面进行取值可以使用jmeter内置函数:${__property(变量名)}
注意:${__property()}函数中,变量名不需要加引号
如:${__property(Authorization)

3.2 如果要在非beanshell里面进行取值可以使用jmeter内置函数:${__BeanShell(props.get(“变量名”),)}
注意:${__BeanShell()}函数是创建了一个小型的java环境,可以直接执行一些简单的表达式
如:${__BeanShell(props.get("usernameProp"),)}

http信息头管理器可以设置在测试计划中,一次设置,后面需要用到token的 就不用再设置了。

4 跨线程组调用成功

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值