一、问题原因:一般测试接口经常会遇到某个接口依赖于上一个接口的返回值,这种情况使用Json提取器或者使用正则表达式就可以了。但是我碰到了一个让我无语的情况,接口的请求参数依赖于上个接口请求参数中某个字段的值。于是便开始一遍遍的问度娘。然而皇天不负有心人终于在开发童靴的帮助下解决了。在此记录一下碰到的坑。
二、解决步骤
1、在Http Request上添加一个BeanShellPostProcessors
2、在BeanShellPostProcessors中编写脚本
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONPath;
// 获取接口中的请求参数
String request = ctx.getCurrentSampler().getArguments().getArgument(0).getValue();
// 将请求参数转为Json格式的数据
JSONObject data_obj= JSON.parseObject(request);
// 拿到请求参数中的mobile值
String mobile = data_obj.getString("mobile");
// 输出日志, 点jmeter右上角的感叹号查看
log.info("mobile={}",data_obj.getString("mobile"));
// 将mobile的数据设为jmeter中变量的值供其它地方使用
//vars.put("mobile", mobile)
// 设置为全局变量
//${__setProperty("phoneNumber", ${mobile},)}
// props可以跨线程组使用,但是vars不可以。
props.put("phoneNumber", mobile);
3、将fastjson-1.2.83.jar包放在jmeter的lib目录下,不然会因为缺少所依赖的包报错。
三、在需要满足需求的道路上一次次的踩坑。
1、本想着使用vars.put(“mobile”, mobile) 设置了变量,那么取出来就可以了,于是使用
m
o
b
i
l
e
取值,但是每次取出来的值都是
1
。既然这样行不通,那么换一个思路,将
m
o
b
i
l
e
设置为全局变量。于是使用
{mobile}取值,但是每次取出来的值都是1。既然这样行不通,那么换一个思路,将mobile设置为全局变量。于是使用
mobile取值,但是每次取出来的值都是1。既然这样行不通,那么换一个思路,将mobile设置为全局变量。于是使用{__setProperty(“phoneNumber”, KaTeX parse error: Expected 'EOF', got '}' at position 11: {mobile},)}̲将mobile设置为全局变量,…{__P(phoneNumber)}将全局变量取出。但是每次取出来的值还是1。最后使用props.put(“phoneNumber”, mobile),使用${__P(phoneNumber)}取值。