BeanShell PreProcessor获取请求body生成签名后重新发送
代码参考:https://blog.csdn.net/syd505/article/details/120347728
HttpRequest-body:{"userId":"1","tel":"${tel}","interCode":"${interCode}","currentTime":"${__time(,)}","sign":""}
BeanShell PreProcessor:
import com.guosen.aes.AES;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config.Argument;
import java.io.*;
import org.json.*;
Arguments arguments = sampler.getArguments(); // 获取请求
Argument arg = arguments.getArgument(0); // 获取请求中的body内容
String content = arg.getValue();
JSONObject dataObj = new JSONObject(content);
List keyArry = new ArrayList(); // 创建list存储body中的key值
Iterator iterator = dataObj.keys(); // 生成迭代对象
// 循环key,将其放入list
while (iterator.hasNext()) {
String key = (String) iterator.next();
// 去除sign
if (!key.equals("sign") && !key.equals("Sign")) {
keyArry.add(key);
}
}
Collections.sort(keyArry); // 对list进行排序
// 循环list中的key,读取对应的Value组成字符串
String re = "";
for (String s : keyArry) {
String str = dataObj.getString(s);
if (!str.equals("")) {
re += str;
}
}
String AES_KEY = "fed366421e9403a5d87c227add999238";
String result = "";
result= new AES().crypto(re,AES_KEY);
System.out.println(result);
vars.put("sign",result.toString());
log.info(result.toString());
// 添加sign字段
dataObj.put("sign", result.toString());
String postData = dataObj.toString();
// 重新设置http request body
arg.setValue(postData);
log.info("****************"+arg.getValue());
遇到问题:
刚开始写的 HttpRequest-body:{"userId":1,"tel":"38969631","interCode":"021","currentTime":"1634261066855","sign":${sign}}
1、 提示 Typed variable declaration : Object constructor
content = {"userId":"1","tel":"38969631","interCode":"021","currentTime":"1634261066855","sign":${sign}}
JSONObject dataObj = new JSONObject(content);
JSONObject构造问题:https://blog.csdn.net/androidyue/article/details/9255035
本次问题是 因为"sign":${sign}而导致了JSONObject构造函数失败,解决:将${sign}改为“”
2、 HttpRequest-body的userId一开始写成了int 类型 1,导致 dataObj.getString(s);失败
String re = "";
for (String s : keyArry) {
String str = dataObj.getString(s);
if (!str.equals("")) {
re += str;
}
}
浙公网安备 33010602011771号