为了完成一个用例中的业务逻辑,时常需要通过在上一个请求的响应报文中抽取相关的数据,从而将其应用在下一个或以后的请求中,从而实现一系列完整的流程。
1.使用JSON Path Assertion
添加一个JSON Path Assertion:右键一个sampler→添加→断言→JSON Path Assertion
例如,请求注册的相应报文为:
Destination Variable Name中填入后续引用该响应报文中的参数值的参数名,JSONPath Expression中填入想要抽取的JSON格式的响应报文中的对应参数名,Default Value中填入当抽取失败时候的响应值。
2.使用BeanShell Post Processor
添加一个BeanShell Post Processor:添加→后置处理器→BeanShell Post Processor
通过getJSONobject获取响应报文的数据,通过getJSONArray获取列表中key=email的值,再通过内置对象vars.put将其赋给emailName参数。
从下一个请求的请求结果可以测出emailName的值是否传成功
3.利用正则表达式提取器
添加正则表达式提取器:添加→后置处理器→正则表达式处理器
引用名称为后续引用该响应报文中的参数值的参数名;正则表达式为提取内容的正则表达式;模板:用$$引用起来,如果在正则表达式中有多个提取表达式,则可以是$1$,$2$等等,表示解析到的第几个值给emailName,正则表达式的提取模式,值从1开始,值0对应的是整个匹配的表达式;匹配数字(0代表随机):0代表随机,-1代表所有;缺省值:抽取数据失败时候的响应值。
4.使用JSON Content Extractor
添加一个JSON Content Extractor:添加→后置处理器→JSON Content Extractor
产生的变量名称:后续引用该响应报文中的参数值的参数名;JSON数组路径描述:$.email表示在JSON数组中的的key=email的变量;目标值key为需要提取的数据名称;其他匹配值需要输入响应报文中其他的数据;变量默认值为当变量没有获取到时返回的值。













网友评论
现在我需要取result的值"G0444260257"作为下一个接口的sessionid,可是使用bean shell获取不到?
下面是我的代码,麻烦看一下谢谢!
使用BeanShell Post Processor:代码如下
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
String json=prev.getResponseDataAsString();
JSONObject jso = JSON.parseObject(json);
JSONObject data = jso.getJSONObject("data");
JSONArray result1 = data.getJSONArray("result");
vars.put("outcome",result1.getJSONObject(0).getString("result1"));
然后
import com.test.mymd5;
//定义机构代码
String code = vars.get("customerCode");
//定义时间戳
String timestamp = vars.get("timestamp");
//定义机构中的serial_number_md5,临时会话验证
String ytoken = vars.get("ytoken");
//定义机构的sessionId
//定义英文下划线_ underscores
String underscores = vars.get("underscores");
//获取创建会话中的token验证的md5加密
String itoken = mymd5.md5(code+timestamp+ytoken);
//获取用户会话中的token验证的md5加密
String ptoken = mymd5.md5(outcome+code+underscores+timestamp+ytoken);
vars.put("itoken",itoken);
vars.put("ptoken",ptoken);
System.out.println(itoken);
System.out.println(ptoken);
现在我发现outcome的值返回的是void,不知道是哪里出现的问题...