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加密参数使用:

  通过查看结果树可以发现,参数加密情况: 

 

posted @ 2020-11-07 23:32  backlightズ  阅读(2484)  评论(1编辑  收藏  举报