news 2026/4/16 15:04:24

软件信创测试和软件首版次认定机构【使用Postman的Pre-request Script动态处理数据】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
软件信创测试和软件首版次认定机构【使用Postman的Pre-request Script动态处理数据】

Postman的Pre-request Script是在HTTP请求发送前执行的JavaScript代码,作用是,能让你动态地准备或修改请求数据,从而模拟真实多变的客户端行为。

常见的动态数据处理情形:

设置动态变量:为请求参数、头部、体部动态生成值,pm.variables.set("timestamp", Date.now());

处理业务:计算签名、拼接加密参数、读取外部数据等,使用 CryptoJS 库计算 HMAC 或 MD5 签名。

控制请求参数:根据思路动态添加或修改请求的 URL、Headers 或 Body,pm.request.headers.add({key: "X-Custom", value: "Dynamic"});

关联前置数据:从前一个请求的响应中提取数据,用于当前请求,一般在 Tests 脚本中提取并设为变量,然后在后续请求的 Pre-request Script 中引用。

生成随机数据:避免重复提交,模拟多样化用户输入,let randomName = 'user' + Math.random().toString(36).substr(2, 5);

数据驱动:从外部CSV/JSON文件读取数据,实现参数化批量测试,在 Collection Runner 中关联数据文件,在脚本中使用 pm.iterationData.get("字段名")。

文章来源:卓码软件测评

精彩推荐:点击蓝字即可
▲软件负载测试
▲API自动化测试▲软件测试▲第三方软件测试▲软件性能测试▲软件测试机构

具体应用

下面通过几个具体例子,展示怎样将这些应用到实际中。

1. 处理时间戳和动态签名

对于需要证实签名或时效性的API,可以自动生成并注入动态值。

// 1. 生成13位毫秒级时间戳 const timestamp = Date.now(); pm.variables.set("timestamp", timestamp); // 2. 假设需要计算签名(使用CryptoJS库,Postman内置支持) const secret = pm.variables.get("api_secret"); // 从变量中读取密钥 const stringToSign = `param1value${timestamp}${secret}`; const signature = CryptoJS.MD5(stringToSign).toString(); // 示例用MD5,可选SHA256等 pm.variables.set("signature", signature); // 3. 在请求URL或Header中,使用 {{timestamp}} 和 {{signature}} 引用变量。

2. 读取并关联外部数据

在数据驱动测试中,可以读取外部文件的数据来填充请求。

// 从数据文件中读取当前迭代的数据(需在Collection Runner中上传CSV/JSON) const username = pm.iterationData.get("username"); // 对应CSV列名或JSON键 const departmentId = pm.iterationData.get("dept_id"); // 设置到变量中,方便在请求体或URL中引用 pm.variables.set("currentUser", username); pm.variables.set("currentDeptId", departmentId); // 也可以在脚本中直接构造或处理数据 const userEmail = `${username}@zmtests.com`; pm.variables.set("email", userEmail);

3. 模拟随机或规则性用户输入

测试创建接口时,避免因数据重复导致失败。

// 生成随机6位字母数字组合的字符串作为用户名 function generateRandomString(length) { return Math.random().toString(36).substr(2, length); } pm.variables.set("random_username", "user_" + generateRandomString(6)); // 生成随机手机号 const randomMobilePrefix = ['130', '139', '188']; const prefix = randomMobilePrefix[Math.floor(Math.random() * randomMobilePrefix.length)]; const suffix = Math.floor(10000000 + Math.random() * 90000000); pm.variables.set("random_mobile", prefix + suffix);

数据驱动测试流程

Pre-request Script 是数据驱动测试的重点步骤。一个典型的工作流程如下:

准备数据文件:创建 CSV 或 JSON 文件,如 users.csv,包含 username, password, email 等列。

编写脚本:在请求的 Pre-request Script 中,使用 pm.iterationData.get() 读取数据,并可能通过 pm.variables.set() 存入变量。

参数化请求:在请求的URL、Body(如raw JSON)或Headers中,使用 {{变量名}} 引用这些数据。

配置并运行:

在Postman中打开Collection Runner。

选择你的集合(Collection),在 Data标签页上传你的CSV/JSON 文件。

设置迭代次数(一般和数据行数一致),点击运行。Postman会为数据文件的每一行执行一次请求,并自动替换变量。

调试技巧

为了保证脚本按预期工作,可以:

使用 console.log():在脚本中打印变量值,然后在 Postman 的 Console (View → Show Postman Console 或 Ctrl+Alt+C) 中查看输出,这是最直接的调试方式。

执行顺序:脚本执行按照从外到内的顺序:Collection 级 Pre-request Script → Folder 级 → Request 级,然后是发送请求,最后执行对应层级的 Tests 脚本。

使用内置动态变量:Postman 提供了一些开箱即用的动态变量,可在请求中直接使用,如 {{$timestamp}}(当前时间戳)、{{$randomInt}}(随机整数)、{{$guid}}(GUID)。它们有时能简化脚本。

变量作用域:pm.variables.set() 设置的变量在当前请求及其后的请求中可用(取决于环境)。使用 pm.environment.set() 或 pm.collectionVariables.set() 可以将变量持久化到环境或集合中,供整个工作流使用。

怎样选择应用场景

需要对每个请求进行动态预处理(如计算签名):直接在单个请求的 Pre-request Script 中编写。

需要对集合中所有请求统一执行初始化(如获取全局Token):在集合(Collection) 的 Pre-request Script 中编写。

需要模拟大量不同数据的测试用例(如用户注册):采用数据驱动测试,结合外部数据文件和Collection Runner。

掌握Pre-request Script后,API测试将变得非常动态和强大。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:18:36

第7章:SpringBoot整合定时任务和异步任务

文章目录SpringBoot整合定时任务和异步任务定时任务schedule定时任务配置实战异步任务AsyncSpringBoot整合定时任务和异步任务 定时任务schedule 什么是定时任务: 在预定义的时间点或时间间隔自动执行特定任务的技术 应用场景: 数据统计报表生成缓存…

作者头像 李华
网站建设 2026/4/16 10:58:15

白细胞介素概述及其第14亚型(IL-14)的生物学特性与临床意义

一、白细胞介素概述 白细胞介素是一类主要由免疫细胞分泌,能够调节细胞间相互作用、免疫应答及炎症过程的信号分子。其命名源于早期研究,因其主要由白细胞产生并在白细胞间介导信号传递而得名。随着科学认知的深入,现已知白细胞介素的来源和…

作者头像 李华
网站建设 2026/4/16 10:52:58

Open Notebook快速上手:5步搭建私有AI知识库

Open Notebook快速上手:5步搭建私有AI知识库 【免费下载链接】open-notebook An Open Source implementation of Notebook LM with more flexibility and features 项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook 为什么选择Open Notebook…

作者头像 李华
网站建设 2026/4/15 15:21:02

ZTE ONU设备管理完整教程:5个步骤快速掌握开源解决方案

ZTE ONU设备管理完整教程:5个步骤快速掌握开源解决方案 【免费下载链接】zteOnu 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 在当今数字化时代,高效管理网络设备已成为运维工作的核心需求。zteOnu作为一款专为ZTE光网络单元设计的开源…

作者头像 李华
网站建设 2026/4/10 19:06:08

如何快速压缩视频文件:CompressO终极使用指南

如何快速压缩视频文件:CompressO终极使用指南 【免费下载链接】compressO Convert any video into a tiny size. 项目地址: https://gitcode.com/gh_mirrors/co/compressO 你是否经常遇到视频文件太大无法发送,或者手机存储空间被视频占满的困扰&…

作者头像 李华
网站建设 2026/4/16 10:54:14

d3dxSkinManage:重新定义游戏MOD管理的技术革命

d3dxSkinManage:重新定义游戏MOD管理的技术革命 【免费下载链接】d3dxSkinManage 3dmigoto skin mods manage tool 项目地址: https://gitcode.com/gh_mirrors/d3/d3dxSkinManage 还在为MOD冲突、贴图错误而烦恼吗?🤔 d3dxSkinManage作…

作者头像 李华