Postman 进阶技巧:告别手动复制粘贴的高效用法
大部分人对 Postman 的印象停留在”图形化的 curl”:填个 URL,点 Send,看返回。这样用完全没问题,但真正拖慢效率的是那些重复劳动——测个受保护的接口,先手动调登录接口拿 token,再复制粘贴到别的请求头里,改天 token 过期了再来一遍;测试数据每次都手打;换个环境要把 URL 里的域名一个个改掉。这些事 Postman 本身都有办法自动化掉。
变量与作用域:环境切换不用改一行 URL
Postman 的变量分五层作用域,从大到小:Global(跨集合全局共用)、Collection(整个集合共用)、Environment(当前选中的环境,比如 dev/staging)、Data(Collection Runner/Postman CLI 批量跑时从 CSV/JSON 文件读进来的数据集变量)、Local(只在当前请求脚本运行期间有效)。同名变量作用域越小优先级越高,按 Local > Data > Environment > Collection > Global 取值。
flowchart TD
G["Global 全局变量"] --> C["Collection 集合变量"]
C --> E["Environment 环境变量"]
E --> D["Data 数据集变量(Runner/CLI)"]
D --> L["Local 脚本运行时变量"]
L -.同名覆盖.-> D
D -.同名覆盖.-> E
E -.同名覆盖.-> C
C -.同名覆盖.-> G
这五层不是随处可见,各自的设置入口容易漏看:Global 在界面底部点 Globals 就能打开,不依赖任何环境;Collection 在集合的 Variables 标签页里设置;Environment 得先建一个环境(右上角环境下拉框选 Create One)并切换过去,才会出现对应的变量面板——如果一直停留在 “No Environment”,自然找不到这个入口;Data 不是”设置”出来的,是跑 Collection Runner 或 Postman CLI 时挂载的外部 CSV/JSON 文件;Local 干脆没有持久化的设置面板,只能在 Pre-request/Post-response 脚本里用 pm.variables.set() 临时写入,运行结束就清空。
实操上最常见的用法:把请求里的域名换成变量,{{base_url}}/users 代替 https://api.dev.example.com/users,再建三个环境 dev/staging/prod,分别把 base_url 设成对应的域名。测试环境切换只需要在右上角环境下拉框里换一下,不用去改任何一个请求的 URL。
Scripts:自动登录、自动续 Token
Postman v11 之后把原来分开的 “Pre-request Script” 标签和 “Tests” 标签合并进统一的 Scripts 标签页,里面再分 Pre-request(请求发出前执行)和 Post-response(拿到响应后执行,就是老版本”Tests”标签做的事)两个子标签。名字变了,脚本能力和写法没变。
脚本语法速览:pm 对象怎么用
这两个标签页里写的都是普通 JavaScript,跑在 Postman 自带的沙箱环境里(不是完整 Node.js,不能 require 任意 npm 包,但内置了几个常用库,比如后面会用到的 pm.sendRequest)。所有跟 Postman 本身打交道的操作,都通过一个全局对象 pm 完成,新手只需要先认全这几个最常用的:
pm.environment.get(name)/pm.environment.set(name, value):读写当前选中 Environment 里的变量pm.collectionVariables.get/set、pm.globals.get/set:分别读写 Collection 变量和 Global 变量,用法跟 environment 那一对完全一样,只是作用域不同(见上一节的作用域讲解)pm.request:仅在 Pre-request 脚本里有意义,代表”即将发出的这个请求”,比如pm.request.headerspm.response:仅在 Post-response 脚本里有意义,代表”刚收到的响应”,pm.response.json()把响应体解析成对象,pm.response.code是状态码pm.test(name, fn)+pm.expect(...):写断言用的,pm.test定义一条测试用例,pm.expect是断言语法(跟 JS 测试框架 Chai 用法一致)console.log(...):输出到 Postman 自带的调试台,菜单栏 View → Show Postman Console 打开,脚本报错或者变量值不对,先来这里看
一个最小的 Post-response 例子,跑完就能在 Postman Console 里看到打印结果:
1 | // Scripts → Post-response |
Pre-request 脚本写法一样,只是没有 pm.response(响应还没收到),常见用途是提前算好一个值塞进变量:
1 | // Scripts → Pre-request |
认清这几个对象和调用方式之后,下面这几个自动化场景的脚本就是同一套语法的组合应用,不用死记硬背。
登录一次,后面全自动带上 token
在”登录”请求的 Scripts → Post-response 里写:
1 | const data = pm.response.json(); |
后续所有需要鉴权的请求,Header 里写 Authorization: Bearer {{token}},就不用每次手动去登录接口的返回里复制那一长串 token 了——发一次登录请求,token 变量自动就位。
进阶:过期自动重新登录
如果嫌”忘了重新登录导致后面请求全部 401”烦,可以把检查逻辑写到 Collection 级别的 Pre-request Script(在 Collection 的设置里编辑,会在集合下每一个请求发出前先执行一遍):
1 | const expiresAt = pm.environment.get("token_expires_at"); |
这段脚本挂在 Collection 上之后,集合里任何一个请求发出前都会先检查 token 是不是快过期了,过期就自动重新登录换新的,业务请求本身完全不用关心鉴权这件事。
动态变量:测试数据不用手写
Postman 内置一批以 $ 开头的动态变量,值在请求真正发出的那一刻生成,最基础的三个是 {{$guid}}(v4 格式的 GUID)、{{$timestamp}}(当前 Unix 时间戳)、{{$randomInt}}(0-1000 的随机整数)。从 7.2 版本开始接入了 faker.js,扩出一大批更贴近真实数据的变量,比如 {{$randomEmail}}、{{$randomFirstName}}、{{$randomUserName}}。
测注册接口时,请求体直接写:
1 | { |
每次点 Send,邮箱、用户名都是新的,不用因为”这个邮箱已被注册”这种报错手动改测试数据。
Postman Vault:敏感信息不进集合、不同步云端
Environment 变量方便,但有个问题:API Key、密码这类东西如果直接明文存在 Environment 变量里,一旦这个 Environment 被导出分享或者同步到 Postman 云端团队空间,敏感信息就跟着一起泄露了。
Postman 的 Vault 就是为这个准备的——存进去的密钥只留在本地(Local Vault),不会同步到云端,也不会被导出的 collection 文件带出去。设置好之后,在任意请求的字段里直接用 {{vault:api-key}} 这种语法引用;脚本里则通过 pm.vault.get("api-key") 访问。团队协作分享 collection 时,Vault 里的值不会被带出去,队友本地要用自己单独配置一份。
批量编辑 headers/params:别一行行加
Header 或 Query Param 一多,一行行点加号、填 key、填 value 很浪费时间。Headers/Params 表格右上角有个 Bulk Edit 按钮,点开切换成纯文本编辑模式,直接粘贴多行 key: value(Headers)或 key=value(Params),保存自动拆成一行行的表格——从接口文档或者旧 curl 命令里复制一段 headers 过来,几秒钟搞定,比逐行填快得多。
代码互转:Code 生成 + curl 导入
从 Postman 导出成代码:每个请求编辑器右侧有个 </> Code 按钮,点开能选一堆语言/工具的代码片段——curl、JavaScript (fetch/axios)、Python (requests)、Go (net/http),把这个请求现在的 URL、Header、Body 原样翻译成对应语言的代码。调好一个请求之后甩给写业务代码的同事,不用他们对着 Postman 界面手抄。
反过来,把 curl 导入成请求:点左上角 Import,选 Raw Text,把从浏览器 devtools 复制来的 curl -X POST ... 整段粘贴进去,Postman 会自动解析出 URL、方法、Header、Body,生成一个可以直接编辑运行的请求,不用手动拆 curl 参数一个个填进对应的框。
批量跑与接入 CI:Runner 面板和 Postman CLI
调好的请求攒成一个 Collection 之后,右上角 Runner 面板能把整个 Collection 一次性批量跑一遍,还能配合 CSV/JSON 数据文件做参数化——同一套请求,用文件里的每一行数据各跑一次,很适合边界值、批量账号这类重复测试。
接入 CI 这块要提醒一句:网上大量教程还在教用 Newman 命令行工具跑 collection 接 CI,这个方案已经过时了。Postman 官方在 2026 年 4 月的博客里明确说明不再维护 Newman,而且 Newman 不兼容 Postman v12 开始使用的 collection v3 格式。现在官方推荐的是 Postman CLI:
1 | curl -o- "https://dl-cli.pstmn.io/install/unix.sh" | sh |
这条命令跑完会在终端里输出每个请求的通过/失败情况,登录状态下结果还会同步回 Postman 云端,比 Newman 更适合塞进现在的 CI pipeline。如果项目还在用旧的 Newman 命令,趁早换成这套。
Mock Server:没有真后端也能先联调
前后端约定好接口文档之后,不用等后端把接口全部写完,用 Mock Server 直接把约定好的返回值模拟出来——建一个 Mock Server,绑定到某个 Collection,Collection 里每个请求上例子(Example)里写的返回数据,就是 Mock Server 实际返回的内容。前端拿着 Mock Server 给的 URL 当作真实后端地址开发,后端接口写完之后原地切换成真实域名即可,两边不互相等。
小结:把重复劳动交给 Postman 自己
这几个技巧共同的思路是同一个:只要是”每次测试都要重复做的手动操作”,Postman 大概率已经有办法自动化——变量解决”环境/数据到处改”,Scripts 解决”手动传令牌”,Bulk Edit 和代码生成解决”重复敲字”,Runner/CLI 解决”批量跑和接 CI”。日常测几个接口不需要样样都用上,但一旦项目里同一套接口要反复测、多人协作维护,这些进阶用法省下来的时间是实打实的。










