前言
部分公司为了提高接口请求的安全性,避免被抓包后乱请求,对外的接口都会用到sign签名,对不同的客户提供不同的secretKey 。用 jmeter 测试带有签名的接口,需要发起请求之前把body里面的sign参数的值修改为签名的值。
sign签名规则
签名参数sign生成的方法
- 第1步: 将所有参数,除去sign本身,以及值是空的参数,将参数名ASCII从小到大排序(字典序)
- 第2步: 然后把排序后的参数,以及参数对应的参数值,使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串
- 第3步: 在第2步得到的字符串最后拼接上 key 得到新的字符串,并进行 MD5 运算,得到32位字符串,最后把字符串小写转成大写,得到的字符串作为sign的值
假设接口的请求方式为post,接口的请求参数如下,提供给客户的secretKey =aaaabbbb:
body = {
"username": "test",
"pwd": "123456",
"phone": "",
"sign": "签名后的值"
}
其中sign参数对应的sign_value就是签名的值。
jmeter生成签名发送请求步骤如下
先右键线程组->取样器->添加HTTP请求,填写请求方式,请求参数等,请求参数中的变量使用${ }格式
右键线程组->配置原件->添加HTTP信息头管理器,填写HTTP信息头信息
右键线程组->配置原件->用户定义的变量,添加请求参数中的变量
右键线程组->前置处理器->添加BeanShell 预处理程序,编写前置验签脚本
完整代码实现如下:
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config