一 首先我们要搞清楚接口签名步骤:
**第一步:初步实现接口**
**第二步:找开发拿到算法和key**
* key:sAHDRNJg0ZevmEn7HwBfbw==
* 算法:HmacMD5 咱们就找一个https://www.wenjiangs.com/doc/85uwistv
* 在JMeter当中,需要引入第三方的包才能支持HmacMD5
**第三步:问开发生成sign的逻辑**
* 对请求数据排序和去重
Map sortMap = new TreeMap(); // 使用TreeMap排序
sortMap.putAll(map); // TreeMap默认升序排序
* 拼接成字符串
StringBuilder sb = new StringBuilder();
for (Map.Entry entry : sortMap.entrySet()){
sb.append("&").append(entry.getKey()).append("=").append(entry.getValue());
}
* 加密
* 以sign形式放入请求数据(请求体/请求头/URL)
* 其他知识
字符串json转json对象
Map map = JSON.parseObject(body);
切割字符串
"sss".substring(1)
二核心代码:
```
import cn.hutool.crypto.digest.HMac;
import com.alibaba.fastjson.JSON;
import java.util.Map;
import org.apache.jmeter.config.Arguments;
// 获取响应数据
Arguments args = sampler.getArguments();
String body = args.getArgument(0).getValue();
log.info("==========body==========:" + body);
// 把响应数据解析成JSON对象
Map map = JSON.parseObject(body);
// 排序
Map sortMap = new TreeMap(); // 使用TrueeMap排序
sortMap.putAll(map); // TreeMap默认升序排序
// 拼接字符串
StringBuilder sb = new StringBuilder();
for (Map.Entry entry : sortMap.entrySet()){
sb.append("&").append(entry.getKey()).append("=").append(entry.getValue());
}
log.info("============sb====: "+ sb.substring(1));
// sign签名
byte[] key = "sAHDRNJg0ZevmEn7HwBfbw==".getBytes();
HMac mac = new HMac("HmacMD5", key);
String sign = mac.digestHex(sb.substring(1));
log.info("-------------------sign-------: " + sign);
// 把sign保存到JMeter变量
vars.put("sign", sign)
```
三 实践效果: