jmeter 接口请求参数加密处理
如图,是其中一个场景的压测脚本。
1.临界部分控制器
根据锁名来控制并发,同一个锁名之下,在同一时间点只能存在一个运行中,适用于控制并发的场景。
这里使用是由于接口存在参数依赖的情况,可以避免出现依赖接口无法获取依赖值的情况。
2.JSR223 预处理程序
下载 jython-standalone-2.7.0.jar 放入jmeter的lib目录中,然后jmeter界面选择python语言<只支持python2,恶心的一批,好在python3和2的差别不大>。
接口参数加密脚本:
import random import base64 import hmac import json import hashlib storeId = vars.get("store_id") # 获取csv等方式参数化值 channelId = vars.get("channel_id") parsms = {} # get请求参数 body = {"storeId": storeId, "channelId": channelId} # post请求参数 vars.put("body", json.dumps(body)) # 把参数加入到jmeter全局变量中,供接口请求使用 def ranstr(num): """ 随机字符串 :param num: :return: """ H = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" salt = "" for i in range(num): salt += random.choice(H) return salt def hmac_sign(params, body, random_str): """ key value body 随机字符串 加密 根据加密方式编写加密脚本 :param params: :param body: :param random_str: :return: """ body = json.dumps(body) if body else "" data = "" if isinstance(params, dict): for key, value in params.items(): data += key + str(value) data += body + random_str vars.put("data", data) appsecret = "xxxxxxx".encode("utf-8") # 秘钥 data = data.encode("utf-8") signature = base64.b64encode(hmac.new(appsecret, data, digestmod=hashlib.sha256).digest()) # 加密数据 return bytes.decode(signature, encoding="utf8") nonce = ranstr(10) # 10位随机字符串 vars.put("nonce", nonce) # header中需要传入的加密字段值 vars.put("sign", hmac_sign(parsms, body, nonce)) # header中需要传入的加密字段值
接口请求参数使用:
header加密参数使用:
通过查看结果树可以发现,参数加密情况:
愿你走出半生,归来仍是少年!