jmeter接口压力测试,对token和参数加解密的处理

上一篇 / 下一篇  2018-08-03 14:18:53 / 个人分类:general

 将请求参数封装为json格式,通过secret进行aes加密,通过base64转为密文字符串,在通过补接key值,创建md5签名sign,最终请求参数格式的为data=xxx&sign=xxx,后端接收到请求参数后进行相应解密,并进行验签执行,确保请求参数data未被篡改。

请求参数示例

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,相当于全局变量,这点在前置处理器和后置处理器中就有所体现




TAG:

 

评分:0

我来说两句

Open Toolbar