如圖,是其中一個場景的壓測腳本。
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加密參數使用:
通過查看結果樹可以發現,參數加密情況: