Postman前置脚本使用案例

发布于:2024-12-20 ⋅ 阅读:(15) ⋅ 点赞:(0)

背景

由于我们的服务接口需要进行验签,每次通过Postman手动调用接口时都显得颇为繁琐。为了简化这一过程,我们可以充分利用Postman提供的脚本功能,自动为接口请求生成所需的签名。

案例

在Scripts中写生成接口签名的脚本。

以下是一个实用的脚本示例,展示了如何在Postman的Scripts中编写代码以生成接口签名:

// 设定你的签名密钥
let signSecret = 'your_sign_secret';

// 初始化一个空对象,用于存放待签名的参数
let param = {};

// 从请求体中解析出JSON参数
let jsonData = JSON.parse(pm.request.body.raw);
console.log(jsonData);

// 调用自定义函数,根据参数生成待签名的字符串
let stringSignTemp = genSignStr(jsonData);

// 获取当前的时间戳(毫秒级)
let timestamp = Date.now();
console.log(stringSignTemp);

// 将时间戳和签名密钥拼接到待签名字符串的末尾
stringSignTemp += timestamp + signSecret;
console.log(stringSignTemp);

// 使用CryptoJS库计算MD5签名
// 注意:确保CryptoJS库已在Postman环境中引入
let sign = CryptoJS.MD5(stringSignTemp).toString();
console.log(sign);

try {
    // 将生成的签名和时间戳添加到HTTP请求的头部
    pm.request.headers.add({ key: "api-sign", value: sign });
    pm.request.headers.add({ key: "api-timestamp", value: timestamp.toString() });

    console.log('签名和时间戳已成功添加到请求头:');
    console.log(jsonData); // 在控制台打印完整的JSON数据以供调试
} catch (e) {
    // 捕获并打印任何可能发生的错误
    console.log(e);
}

// 自定义函数:根据对象参数生成待签名的字符串
function genSignStr(objectMap) {
    // 此处应实现具体的签名参数拼接逻辑
    // 例如,将对象参数按键名排序,然后拼接成"key1=value1&key2=value2"的格式
    let resultString = "";
    // ...(签名参数拼接逻辑的实现)
    return resultString;
}

Tips:

  • 如果你正在处理一个包含多个接口的项目,并且这些接口都需要使用相同的签名逻辑,那么你可以在Postman的项目文件夹中统一配置这个脚本,以便所有接口都能共享这一功能。

pm对象API参考: 

  pm.request

  request 是接口请求对象。在前置脚本中表示将要发送的请求,在后置脚本中表示已经发送了的请求

  request 包含了以下结构:

  • pm.request.url:Url: 当前请求的 URL。

  • pm.request.getBaseUrl():获取当前运行环境选择的的 前置 URL,在 2.1.39 版本之后支持。

  • pm.request.headers:HeaderList:当前请求的 headers 列表。

  • pm.request.method:String 当前请求的方法,如GETPOST等。

  • pm.request.body:RequestBody: 当前请求的 body 体。

  • pm.request.headers.add({ key: headerName:String, value: headerValue:String}):function: 给当前请求添加一个 key 为headerName的 header。

  • pm.request.headers.remove(headerName:String):function: 删除当前请求里 key 为headerName的 header

  • pm.request.headers.get(headerName:String):function: 查询当前请求里的 headerName

  • pm.request.headers.upsert({ key: headerName:String, value: headerValue:String}):function: upsert key 为headerName的 header(如不存在则新增,如已存在则修改)。

  • pm.request.auth: 当前请求的身份验证信息

通过上述脚本,你可以轻松地在Postman中自动为接口请求生成签名,从而大大提高接口调用的效率和便捷性。


网站公告

今日签到

点亮在社区的每一天
去签到