当前位置: 首页 > 测试知识 > 使用软件测试工具Postman的Pre-request Script来动态处理数据
使用软件测试工具Postman的Pre-request Script来动态处理数据
2025-11-21 作者cwb 浏览次数1

Postman中的Pre-request Script是一个强大的工具,能在请求发送前动态处理数据、定制请求,从而实现更复杂和灵活的API测试。


Pre-request Script的概念

简单说,Pre-request Script就是一段在HTTP请求发送之前执行的JavaScript代码。能将一些手动、重复的操作进行自动化,如:

动态参数:生成时间戳、随机字符串,或对参数进行编码、加密。

请求元素:在发送前动态设置请求头、URL参数或请求体数据。

环境和变量:灵活地设置或更新环境变量、集合变量,为请求准备合适的数据。

处理接口:通过发送异步请求来获取必要的令牌(Token)或数据,保证后续请求的正确。


脚本执行顺序和作用域

理解脚本的执行顺序和作用域对于编写正确的预请求脚本非常重要。

执行顺序:当请求位于集合或文件夹中时,脚本的执行遵循一个特定的层级顺序:

集合级别脚本(如果存在)

文件夹级别脚本(如果存在)

请求本身级别的脚本

这个顺序就像是剥洋葱,从外到内,一层一层地执行。

作用域:Pre-request Script可以添加到集合、文件夹或单个请求中,影响范围由所在的位置决定的。


动态数据处理实战

以下是一些在Pre-request Script中动态处理数据的常见情况和代码示例:


生成随机数据

const randomStr = Math.random().toString(36).substr(2, 10); pm.environment.set("randomStr", randomStr);

//避免因重复数据导致请求失败,常用于用户名、订单号等字段。


生成时间戳

const timestamp = Math.floor(Date.now() / 1000).toString(); pm.globals.set("timestamp", timestamp);

//用于校验请求时效性或作为签名参数。


参数编码

encodevalue = encodeURIComponent(pm.request.url.query.get("p")); pm.request.url.query.remove("p"); pm.request.url.query.add("p=" + encodevalue);

//保证URL参数符合规范,避免服务器解析错误。


和请求元素进行交互

Pre-request Script的强大之处在于可以直接修改请求的各个部分。

操作查询参数(URL Params)

动态地添加、修改或删除URL中的查询参数。下面的代码演示了如何获取、编码并更新一个名为"p"的查询参数:

javascript

// 获取、编码并更新查询参数

encodevalue = encodeURIComponent(pm.request.url.query.get("p")); // 获取并编码参数值

pm.request.url.query.remove("p"); // 删除原有的参数

pm.request.url.query.add("p=" + encodevalue); // 添加编码后的新参数

console.log("p=" + encodevalue); // 可在控制台查看输出



设置请求头(Headers)

在发送需要认证的API请求时,可以动态地在请求头中添加认证信息:

javascript

// 从环境变量获取token并添加到请求头

const token = pm.environment.get("authToken");

pm.request.headers.add({

  key: "Authorization",

  value: "Bearer " + token

});


构建请求体(Body)

对于POST请求,你可以动态地构建或修改请求体中的数据:

javascript

// 生成随机用户名和密码并设置到请求体

let randomUsername = 'user' + Math.random().toString(36).substr(7);

let randomPassword = 'pass' + Math.random().toString(36).substr(7);

// 设置请求体(Raw JSON)

const requestBody = {

    username: randomUsername,

    password: randomPassword

};

pm.request.body.raw = JSON.stringify(requestBody);


高级技巧

当基础操作无法满足需求时,可以尝试以下高级技巧:

发送异步请求处理依赖

如果当前请求依赖于其他接口的返回结果(例如需要先获取一个短时效的Token),可以使用 pm.sendRequest 方法。

javascript

// 在发送主请求前,先获取Token

pm.sendRequest({

  url: pm.environment.get("apiBaseUrl") + "/token",

  method: "POST",

  body: JSON.stringify({ username: "user", password: "pass" })

}, (error, response) => {

  if (!error) {

    const token = response.json().token;

    pm.environment.set("authToken", token); // 将Token存入环境变量

  }

});


注意:由于 pm.sendRequest 是异步的,你需要保证在主请求中处理好回调逻辑。


实现数据驱动测试

可以利用Pre-request Script和Collection Runner或Newman结合,实现数据驱动测试。通过在CSV或JSON文件中准备多组测试数据,在脚本中使用 pm.iterationData.get("key") 来获取每次迭代的数据,从而用不同的数据重复执行同一个请求。


调试和优化

编写脚本时难免会遇到问题,掌握调试方法非常重要。

使用控制台(Console):在脚本中使用 console.log() 来输出变量的值或执行流程信息。通过点击Postman左上角的"View" -> "Show Postman Console"打开控制台查看这些日志。

查看测试结果:请求发送后,你可以在"Tests Results"标签页看到断言的结果,失败的断言会显示红色错误信息,帮助你定位问题。

文章标签: 测试工具 软件测试 第三方软件测试 软件测试需求 软件测试标准 软件测试中心
咨询软件测试