要达到的目的:
app每个请求里面 请求头都带有一个 sign 的参数,
他的值是通过 开发自己设计的拼接方式 再通过md5加密生成
我们就是要生成这个sign的值出来
准备:
和开发要到签名组成公式: 这里公司具体的签名算法已在我的百度云盘有详细讲解
注意: 这里最后的拼接公式是 body(里的请求参数)+uid+token+version+time+"ibroker-wpd"
body里面有多个参数&连接 (注意 这里自己踩了一个坑,没有加&,并且要按首字母大小排序)
后记:
(踩坑)
用python写的时候忘记请求参数是用=号去拼接,用了:号 尴尬
用BeanShell 写 md5的java 函数写法:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
String MD5(String s) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(s.getBytes("utf-8"));
return toHex(bytes);
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
String toHex(byte[] bytes) {
final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
StringBuilder ret = new StringBuilder(bytes.length * 2);
for (int i=0; i<bytes.length; i++) {
ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
}
return ret.toString();
}
String params = "version=1";
String md5_src= params+vars.get("uid")+vars.get("token")+vars.get("app_version")+vars.get("timestamp")+vars.get("sign_salt");
//log.info("md5_src:"+md5_src);
String result = MD5(md5_src);
//log.info("md5:"+result);
vars.put("sign",result);
踩坑: version=1 其实是 请求体参数里的请求参数 要使用&拼接
最后的组成:(注意要使用後置的beanshell)
源码和这个jmeter文件,存在在了我的百度云盘里面。