请求参数示例json格式的请求参数
{
"mobile" : "13000000000"
}
key="xxxxxx"
secret="xxxxxxxxxxx"
data = base64(aes(json+ secret))
sign = md5(data +key)
最终请求参数:data=xxx&sign=xxx
返回参数示例
{
"resultCode": "S00000",
"resultMessage": "接口调用成功",
"data" : AES加密密文结果
}
与客户个人信息相关的接口调用需要传入token,从header中带入
业务说明完毕,举例账户中心接口,实现思路是BeanShell PreProcessor中调用设置好的jar包对入参加密,执行登录接口,BeanShell PostProcessor中引用jar包对出参解密,获取token,token传给账户中心接口,在HTTP信息头管理器代入,同理,BeanShell PreProcessor引用jar包对账户中心接口的入参加密,返回不用解密直接断言来判断结果。
重点说明下登录接口的前置处理器和后置处理器的设置:
先设置jar包,找前端开发要下,一个是aes加解密,一个是md5加密,放置在****\apache-jmeter-3.0\lib\ext下,重启
BeanShell PreProcessor:
import com.hsbank.test.AESUtil;//压缩工具打开jar包,找到class文件的路径就是导入路径
import com.hsbank.test.MD5Util;
String rginData= vars.get("orginParam");//用户定义的变量中定义的入参orginParam
String aesData = AESUtil.encrypt(orginData, "xxxxxxxxxxx");
String md5Sign = MD5Util.getMD5String(aesData + "xxxxxx");
vars.put("data",aesData);//定义入参data,http请求中引用作为入参
vars.put("sign",md5Sign);//定义入参sign,http请求中引用作为入参
BeanShell PostProcessor:
import com.hsbank.test.AESUtil;
String resultStr = prev.getResponseDataAsString();//获取响应
log.info(resultStr);
//找返回的data参数值
int indexOfData = resultStr.indexOf("\"data\":");
int beginIndex = resultStr.indexOf("\"",indexOfData+6);
int endIndex = resultStr.indexOf("\"",beginIndex+1);
String data = resultStr.substring(beginIndex+1,endIndex);
String riginData = AESUtil.decrypt(data, "xxxxxxxxxxx");//对data解密
//找token值
int indexOftoken = originData.indexOf("\"token\":");
int begin = originData.indexOf("\"",indexOftoken+7);
int end = originData.indexOf("\"",begin+1);
String token = originData.substring(begin+1,end);
props.put("myToken",token);//9999999999999
账户中心接口线程组中 HTTP信息头管理器元件中设置token键,值为${__P(myToken,)},意思获取标志999999处设置好的myToken值
备注:同一个线程组可以使用vars.put来设置变量值,相当于局部变量,跨线程组需要使用props.put,相当于全局变量,这点在前置处理器和后置处理器中就有所体现