上一个接口返回的token要作为下一个接口的入参,需要获取实时token,这里列举三种方法。
1、后置处理器-JSON Extractor
2、后置处理器-正则表达式提取器
3、后置处理器-Beanshell PostProcessor
案例场景
有一个登陆接口A,登陆成功后返回一个token值,另有接口B,必须要先登录后传登录的token才能访问
A接口返回报文如下
1、后置处理器-JSON Extractor
在请求1中,添加后置处理器-Json提取器,从返回的结果中提取token值
关联请求,在HTTP信息头管理器,引用token参数${token},如下:
2、后置处理器-正则表达式提取器
在请求1中,添加后置处理器-正则表达式提取器,从返回的结果中提取token值
关联请求引用方式和JSON Extractor一致
ps:
JSON Extractor和正则表达式提取的区别:
json提取器只能提取json格式的数据,正则可以匹配任意的返回。
3、后置处理器-Beanshell PostProcessor
BeanShell是一个嵌套在jmeter中的一个免费的、小型的处理器,采用Java编写的。
接口间的关联参数数据需要传递参数值。故可通过Beanshell PostProcessor来处理,在请求1中添加后置处理器 -> BeanShell PostProcessor
在Beanshell PostProcessor中的Script中输入以下代码
//先引入jar包
import org.json.*;
//获取请求返回值。赋予字符串String 变量
String reponseresult_user = prev.getResponseDataAsString();
//将string的值转换成 jsonobject 对象
JSONObject json_user=new JSONObject(reponseresult_user);
JSONObject obj_user = json_user.getJSONObject("data");
//获取json中token的值
String access_token=obj_user.getString("token");
//将获取到的token值赋予变量
vars.put("Token",access_token)
后续的接口调用(${变量名称})将token对应的值加进去就可以,如这个为 ${Token}
Beanshell PostProcessor提取的优点
可以跨线程引用提取到的参数。引用方式为: ${__P(变量名称,)},如 ${__P(Token,)}
若jmeter中没有org.json的jar包,需要下载导入,
导入方式为:在测试计划中,通过浏览按钮,将需要导入的jar包引入