Skip to content
rianma
Go back

Postman 高级使用技巧

Postman 高级使用技巧

Postman 是非常常用的 HTTP 请求调试工具,具备友好的界面、丰富的功能,相信大家已经很熟悉 Postman 基本的发送请求、查看响应功能了。但同时 Postman 还提供了许多高级功能,可以帮助我们更有效地进行 API 开发和测试。

本文将分享一些 Postman 的高级使用技巧,结合个人开发后端接口的实际应用场景,帮助你解锁 API 调试的新姿势。

环境变量、全局变量与集合变量

变量可以让你在不同的请求中重用数据,避免重复输入。Postman 支持三种类型的变量:

不论以上哪种变量,都可以通过 {{变量名}} 的形式来获取到。

实际应用场景

Pre-request 脚本

Pre-request 脚本在请求发出前执行,最常用的是需要动态计算或修改请求参数时,可以手动编写 JS 脚本实现。

例如某些内部接口需要在请求头中携带经过 Base64 编码的用户身份信息作为认证凭据。

在调试时,就可以使用以下 Pre-request 脚本,使 Postman 在发送请求前,动态获取 operator 参数,再进行如下计算,得到对应的认证请求头:

const operator = pm.collectionVariables.get('operator')

const userInfo = {
    login: operator
}

const source = JSON.stringify(userInfo)
const encoded = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(source))

console.log(encoded)

pm.collectionVariables.set('authHeader', encoded)

Test 脚本

Test 脚本在收到响应后执行,核心功能是用 JS 编写断言,验证请求是否成功等,或可视化响应内容。

例如最常见的脚本为:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

除了手动编写 test 断言代码,Postman 从去年底开始集成了非常智能的 AI 辅助功能,在编写 test 脚本时可以直接用自然语言(仅支持英文)描述需求,自动生成对应的测试用例。

在 Test 脚本中可视化输出结果

Postman 的 test 脚本还提供了 Visualizer(可视化)功能,支持将 API 响应数据以直观易懂的方式呈现给用户,方便开发者更好地理解 API 接口的数据结构和内容。

使用方式:直接在请求的 test 标签页,用 pm.visualizer.set($template, $data) 实现即可。

pm.visualizer.set(
  `
  <table border="1">
    <thead>
      <tr>
        <th>名称</th>
        <th>值</th>
      </tr>
    </thead>
    <tbody>
      {{#each response.data}}
      <tr>
        <td>{{name}}</td>
        <td>{{value}}</td>
      </tr>
      {{/each}}
    </tbody>
  </table>
  `,
  {
    response: pm.response.json()
  }
);

与 test 脚本编写断言类似,Visualizer 功能也可以通过 Postman 的 Postbot AI 辅助工具用自然语言自动生成模板代码。在 WebStatic 项目中,最常用此功能以调试列表页形式的接口。

批量测试 API 请求

在开发部分功能时,需要构造出多种不同的请求参数,作为测试用例,观察响应的结果是否符合预期。此时,就可以使用 Postman 的”批量运行请求”功能,自动化地执行多个接口的测试用例,并给出完整的测试结果报告,代替人工逐个发送请求的繁琐步骤。

实际应用场景: 在开发泳道灰度相关需求时,存在着泳道、灰度、主干分别命中等 10 多种 case 需要测试与回归验证。对此为每一种 case 编写了对应的请求和 test 脚本,批量执行即可。

批量执行请求,并循环提供多个参数

在上一个功能的基础上,Postman 还支持重复运行请求,并且每次传入不同的参数,实现类似 JS 中使用 Promise.all() 遍历数组、循环执行某请求的效果:

const list = ['appkey1', 'appkey2']

await Promise.all(list.map(async (appkey) => {
  const res = await fetch(`${url}?appkey=${appkey}`)
  return res
}))

使用方式:

  1. 编写请求时,将要循环遍历的参数用 {{foo}} 的形式表示出来
  2. 点击请求所在目录右侧的菜单 “Run folder”,打开 Runner 页
  3. 在 “Data” 上传 csv/json 文件,文件内容需要是 JSON 数组或 csv 表格格式,数组成员包含对应字段即可

例如 appkey.csv 内容如下:

appkey,note
com.example.myapp,123
com.example.myapp2,456

在部分场景下,调用 API 接口需要携带有效的登录态 Cookie(如 login_token),此时可以通过安装 Postman interceptors 扩展(Chrome 浏览器),将浏览器中的 Cookie 同步到 Postman 软件。

操作步骤:

  1. 点击请求右侧的 Cookies 按钮,打开 Cookie 管理弹窗
  2. 如果未安装 Postman Interceptor 扩展,根据界面引导完成扩展安装与配置
  3. 安装并连接 Interceptor 扩展后,在 Sync Cookies 标签页可以看到连接状态,再添加要同步 Cookie 的域名
  4. 再次发送请求,即可携带对应的 Cookie

其他功能


Share this post on:

Previous Post
Node.js 服务端开发异常处理最佳实践
Next Post
重新学习 HTTP 缓存