在调研需求或者与后端联调时,我们都会使用三方工具快速构建请求来测试接口的可行性。三方工具就很多了,但是他们的使用方式差不多一样的,该有的功能都会提供。
在联调接口时,经常会碰到一些接口需要动态参数去请求,比如加密,或者参数需要当前时间戳等。这个时候想不到用什么方法时,那就可以使用pre-request-script前置脚本来处理。
(1)请求执行顺序
执行顺序先从: 前置脚本 -> request -> response -> 测试。 如图:
(2)实践场景
场景1:
某个三方的SRN接口的鉴权。也就是请求接口前,需要对的指定参数,进行加密,给到服务端鉴别是否有权限可以请求。
如: 需要在请求头提供一个Authorization参数,对应的value值是: Digest validTime="validTime", response="HMAC-SHA256(正文,密钥)"。 需要对body请求参数进行HMAC-SHA256的加密。validTime需要当前时间戳。
postman或者其他三方工具,都有前置脚本的沙箱内提供了一些内置模块。比如加密模块 crypto-js。
编写以下代码:
var CryptoJS = require("crypto-js");
var key = "TESTKEY";
var body = `{"name":"TESTNAME","_id":"ktMGAKnkmr2N"}`; // 待加密的正文
var validTime = Math.floor(Date.now()); // 有效时间
var hash = CryptoJS.HmacSHA256(body, key);
var authorizationHeader = `Digest validTime="${validTime}", response="${hash}"`;
pm.request.headers.add({
key: "Authorization",
value: authorizationHeader
})
再把对应的前置脚本代码放在Pre-request-script的tab下面:
pm是Postman提供的一个Object对象, 它可以使用Postman的JavaScript API的大部分功能,同时提供对请求和响应数据以及变量的访问。 前置脚本的沙箱内不仅提供模块crypto-js,还有一些Node.js的内置模块也有提供, 如: path、 buffer、 url、 util、 stream流操作模块等。通过require引入到沙箱内使用。
场景2:
对请求url的参数进行动态替换值,或者是替换url的宏。如:url: https://xxx/search?query={{userName}}&type=1, 需要替换掉query参数的值,把userName替换为指定值。
这里的{{userName}}定义方式是postman官方自定义变量的方式,需要加{{}}大胡子括号。替换该userName的值,可以通过pm.variables.set 或者 pm.collectionVariables.set进行设定值。
const name = "摆烂工程师";
pm.collectionVariables.set("userName", name);
如果想确定url的宏是否替换成功,可以打开postman的console控制台查看对应的日志。有打印请求的url的日志记录。
场景3:
在Tests还可以做一些单元测试。也就是request test。并且可以根据ChaJs BDD的语法进行编写。