当前位置: 首页 > 测试知识 > Postman预请求脚本软件测试实战:如何动态生成签名与处理接口依赖
Postman预请求脚本软件测试实战:如何动态生成签名与处理接口依赖
2025-11-19 作者cwb 浏览次数10

Postman预请求脚本能让你在发送请求前动态处理数据,这对于需要动态生成签名和处理接口依赖的场景非常实用。


动态生成签名:时间戳处理、参数拼接、加密算法,CryptoJS, pm.environment.set

处理接口依赖:前置接口响应解析、变量传递、确保执行顺序,pm.response.json(), pm.environment.set

脚本管理和调试:脚本复用、控制台调试,eval(environment.postmanUtil), console.log()


动态生成签名

接口签名主要用于验证请求的合法性和防止篡改。


获取并设置时间戳

签名通常需要一个时间戳,可以这样生成:


javascript

let timestamp = new Date().getTime(); // 或 Math.round(new Date().getTime()/1000) 获取秒级

pm.environment.set("timestamp", timestamp);


注意:全局或环境变量中需要提前配置好 appId 和 appSecret。


构造签名原文字符串

根据接口规则拼接签名参数,例如:


javascript

let appid = pm.environment.get("appid");

let appSecret = pm.environment.get("appSecret"); // 这里是appSecret,注意变量名

// 假设签名需要body内容、appid、appSecret和时间戳

let plain = appid + "$" + request.url.toLowerCase() + "$" + timestamp; // 示例1

// 或者使用请求体数据和其他参数

// let str = request.data["name"] + request.data["age"]; // 示例2

// let plain = str + appid + appSecret + timestamp; // 示例2


计算签名并设置变量

使用Postman内置的CryptoJS库加密:


javascript

// 使用 HMAC-SHA1 加密 (示例算法)

let sign = CryptoJS.HmacSHA1(plain, appSecret).toString(CryptoJS.enc.Base64);

// 或者使用 MD5 加密 (示例算法)

// let sign = CryptoJS.MD5(plain).toString();

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


如果Postman的加密库不满足需求,甚至可以请求后台接口生成签名。

注意:签名结果若包含特殊字符(如+),可能需要使用encodeURIComponent()进行编码。

处理接口依赖

在多接口测试中,经常需要将前一个接口的返回值作为后一个接口的参数。


在前置接口的Tests脚本中提取数据

在第一个接口的 Tests 标签页中,解析响应JSON并保存到环境变量:


javascript

// 验证响应状态和内容

pm.test("Status code is 200 and contains token", function () {

    pm.response.to.have.status(200);

    pm.expect(pm.response.text()).to.include("token");

});

// 提取token和user_id

var jsonData = pm.response.json();

pm.environment.set("_token", jsonData.result.token); // 根据实际响应结构调整

pm.environment.set("_userid", jsonData.result.user_id);


在后续接口中使用保存的变量

在后续接口的请求参数(如URL、请求头、Body)中,使用{{_token}}、{{_userid}}的方式引用前面设置的变量。


脚本管理和调试

复用预请求脚本:将通用的预请求脚本(如通用的签名函数)保存在集合(Collection) 级别或环境变量中,可避免重复编写。例如,可以将一个复杂的签名函数postmanUtil定义为环境变量,然后在各个请求的预请求脚本中通过eval(environment.postmanUtil);调用。

善用控制台:在预请求脚本中使用console.log()输出调试信息,然后在Postman控制台(View -> Show Postman Console)查看,这对排查脚本问题非常有帮助。


提醒注意

注意执行顺序:预请求脚本在请求发送前执行,Tests脚本在收到响应后执行。

变量作用域:pm.environment.set用于设置环境变量,pm.collectionVariables.set用于设置集合变量。环境变量适用于特定环境(如测试、生产),集合变量在该集合内可用。根据需求选择合适的变量。

加密算法选择:确认接口要求的加密算法(如HMAC-SHA1、HMAC-SHA256、MD5),确保预请求脚本中使用的算法和接口要求一致。

文章标签: 软件测试 软件测试用例 API接口测试 接口性能测试
咨询软件测试