阿猫的博客

阿猫的博客

Postman 使用Pre-request 脚本及引入外部依赖

2022-09-12

背景

在使用 Postman 模拟请求一些接口时,如果遇到需要签名、加密等情况,需要对请求的字段动态做一些处理,每次去计算签名就比较麻烦。好在 Postman 提供了 Pre-request 脚本[1]这一功能,支持使用 JavaScript 写一些脚本来计算请求参数,做自动化接口测试等。

基础知识

其实 Postman 的脚本能实现的功能就是可以动态地生成请求的参数,这里需要用的其实就是get/set请求的参数。

获取请求体

pm.request.body

提供了一个 toJSON() 方法可以把请求体变成JSON结构体。

设置环境变量

pm.environment.set("signature", sign)

将生成的签名设置到环境变量中,后续用于请求。

使用 Postman 提供的变量

Postman 提供了一系列动态变量[2],例如时间戳、随机整数等。

var timestamp = pm.variables.replaceIn('{{$timestamp}}')

使用外部依赖

这是本篇文章的重点之一。有的接口官方提供了代码样例,如

var genSignature=function(secretKey,paramsJson){
    var sorter=function(paramsJson){
        var sortedJson={};
        var sortedKeys=Object.keys(paramsJson).sort();
        for(var i=0;i<sortedKeys.length;i++){
            sortedJson[sortedKeys[i]] = paramsJson[sortedKeys[i]]
        }
        return sortedJson;
    }
    var sortedParam=sorter(paramsJson);
    var needSignatureStr="";
    for(var key in sortedParam){
        var value=sortedParam[key];
        needSignatureStr=needSignatureStr+key+value;
    }
    needSignatureStr+=secretKey;
    var md5er = crypto.createHash('md5');//MD5加密工具
    md5er.update(needSignatureStr,"UTF-8");
    return md5er.digest('hex');
};

可以看到,这里使用了一个crypto 的包。我对JS并不熟悉,虽然 Postman 中自带有一个 crypto-js,但我不想花时间研究这两个包的差异,然后再把这个代码替换成等效的用法,因此需要有一种机制去像正常引包一样,把这个包require 进来。

经过一番查找,我找到了这个repo[3]。其使用方法较为简单,clone 项目到本地然后按照repo里的提示运行即可。


  1. https://learning.postman.com/docs/writing-scripts/pre-request-scripts/ ↩︎

  2. https://learning.postman.com/docs/writing-scripts/script-references/variables-list/ ↩︎

  3. https://github.com/matt-ball/postman-external-require ↩︎