1、由于对接口请求进行加密,填写的body的json格式不要待格式,格式里面会有空格啥的,接口请求中headers中的新增的属性是把body转为jsonStr进行MD5加密
2、在beanshell的前置处理器中,每次都新增了x-header-signature属性,如果是多线程执行,这样会道痴,接口请求中有多个x-header-signature值,增加如下代码删除headers属性中
// 先删除 x-header-signature,不然对于多线程,每次new一个header("x-header-signature"),会有多个值产生
sampler.getHeaderManager().removeHeaderNamed("x-header-signature");
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;
import com.alibaba.fastjson.*;
import com.alibaba.fastjson.JSONObject;
/*-----------取http请求中的body值---------------*/
//创建一个map存储数据
String body=null;
//获取参数
Arguments args = sampler.getArguments();
//开始遍历
it = args.iterator();
while(it.hasNext()){
argument = it.next();
String pair = argument.toString();
//log.info("----1"+pair);
if(pair.startsWith("=")){
body = pair.substring(1);
}
}
// log.info("====获取到body====");
JSONObject json=JSON.parse(body);
// log.info("解析成功===="+ json);
// log.info("---------_data-----------:"+json.toString());
//vars.put("m_data",json.toString());
vars.put("m_data",JSON.toJSONString(json));
//log.info("解析成功==的string=="+ vars.get("m_data"));
//对字符串进行加密
import org.apache.commons.codec.digest.DigestUtils;
String password = vars.get("m_data");
//String password = vars.get("password");
String pwd=DigestUtils.md5Hex(password).toUpperCase( );//将密码加密且转换为大写
vars.put("pwd",pwd);
log.info("md5加密之后的string=="+ vars.get("pwd"));
import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.protocol.http.control.Header;
// 先删除 x-header-signature,不然对于多线程,每次new一个header("x-header-signature"),会有多个值产生
sampler.getHeaderManager().removeHeaderNamed("x-header-signature");
// 获得请求头信息
HeaderManager headers = sampler.getHeaderManager();
// 打印全部请求头信息
log.info("添加前" + headers.getHeaders().getStringValue());
// new一个Header对象
myHeader = new Header("x-header-signature", pwd);
// 添加Header到请求头管理器
headers.add(myHeader);
// 打印全部请求头信息
log.info("添加后" + headers.getHeaders().getStringValue());