zoukankan      html  css  js  c++  java
  • 测试实践——接口测试 Postman 发送请求,参数排序后实现 MD5 加密签名规则

    工作中自我使用

    在使用 Postman 进行接口测试过程中,部分接口的请求参数会进行 MD5 加密的签名校验。

    签名规则

    请求参数按照 ASCII 码从小到大排序,追加秘钥,再进行 MD5 加密得到签名值sign。具体步骤如下:
    首先,构造待签名字符串。待签名字符的生成规则如下:

    1. 请求参数都按照名称 ASCII 码,升序排列 (参数名称不允许相同)
    2. 如果参数值带有中文, 需要制定字符集编码为 UTF-8
    3. 如果参数值为空,那么该参数不参与签名
    4. 秘钥作为最后一个参数, 参数名为:key 将请求参数按上述顺序用&拼接。 然后,用 MD5 算法,对待签名字符串进行加密, 生成的签名数据(32 位小写字符), 即是参数中sign的值。

    在 Postman 中 pre-request script 的具体实现

    1. 设置环境变量keysign key值是秘钥;sign值随意设置。
    2. 请求参数设置中,引用sign
    1. Pre-request-Script 中写 MD5 加密签名规则的脚本
    2. //获取3个全部变量
      appId = pm.environment.get("zx_appId"); 
      file_sign1 = pm.environment.get("file_sign");
      securityKey = pm.environment.get("zx_securityKey");
      
      var params = request.data; //获取接口入参
      params["securityKey"] = securityKey; //添加参数
      keys = Object.keys(params).sort() //请求参数名按照ASCII码升序排序
      
      //拼接待签名字符串
      var str = []
      for (var p = 0; p < keys.length; p++) { 
          if(keys[p] == "sign" || request.data[keys[p]] === ""){ // "==" ==宽松相等,隐性类型转换,值相等,返回true; "===" 严格相等,值和类型都相等,返回true
              continue;
          }
          if(keys[p] == "appId"){
              str.push(keys[p] + "=" + appId);
          } else if(keys[p] == "file"){
              str.push(keys[p] + "=" + file_sign1);
          } else if(keys[p] == "securityKey"){
              str.push(keys[p] + "=" + securityKey);
          } else {
              str.push(keys[p] + "=" + request.data[keys[p]]);
          }
      }
      var sign = str.join("&")  
      
      //MD5加密签名规格,并赋值给环境变量`sign`
      pm.environment.unset("sign");
      pm.environment.set("sign", CryptoJS.MD5(sign).toString());
      console.log(sign); // 看日志

    注意
    在单个请求的 Pre-request-Script 中添加脚本,脚本只对该请求参数生效。


    如果,在一个 Collection 或 Folder 中的所有请求的参数的处理相同,可以在 Collection 或 Folder 的 Pre-request-Script 中添加脚本。

    最后说:

    我可以直接跑结果的,如果使用有错误,可以打日志:

    console.log(sign);

    日志框快捷键:ctrl+alt+c 

    爱生活,更爱给我带来生活的人
  • 相关阅读:
    SAS学习笔记27 卡方检验
    SAS学习笔记26 方差分析
    SAS学习笔记25 t检验(单个样本t检验、配对样本t检验、两个独立样本t检验及方差不齐时的t'检验)
    SAS学习笔记23 线性回归、多元回归
    HTML canvas画布
    HTML 新全局特性
    MYSQL数据库学习(五)如何自定义函数
    什么是单机结构?什么是集群?什么是分布式?
    MYSQL数据库学习(四)如何备份还原数据库
    MYSQL数据库学习(三)关于DML操作
  • 原文地址:https://www.cnblogs.com/chenyq/p/14760079.html
Copyright © 2011-2022 走看看