【测试工具】 Postman 基本使用

Postman 基本使用

  • 一、基本使用
    • [1. 主要概念](#1. 主要概念)
    • [2. 发送请求(Requests)](#2. 发送请求(Requests))
      • [2.1 请求参数](#2.1 请求参数)
      • [2.2 请求脚本](#2.2 请求脚本)
    • [3. 集合管理(Collections)](#3. 集合管理(Collections))
    • [4. 环境管理(Environments)](#4. 环境管理(Environments))
  • 二、高阶使用
    • [1. APIs](#1. APIs)
    • [2. Mock Servers](#2. Mock Servers)
    • [3. Flows](#3. Flows)

作为一个常用的接口测试工具,postman具有交互性强,操作简单,具有协作能力、环境切换能力等优点。
本文用于记录目前我使用postman的些许心得。

这里先抛一个postman官方使用手册:

https://learning.postman.com/docs/getting-started/introduction/

一、基本使用

1. 主要概念

从上面这两张截图可以看到,postman有Collections、APIs、Environments、Mock Servers、Monitors、Flows、History等概念。

Collections就是集合,可以用来归纳一系列接口,接口请求的测试也就是我们平时最经常使用的功能。

2. 发送请求(Requests)

我们可以点击上图绿色箭头指向的New按钮,选择Http Request新建一个请求,或者点击绿色箭头处的加号,出现如下图这样的一个初始化界面。

2.1 请求参数

我们可以根据实际的接口请求修改 Request,比如请求方法,URL,请求参数,认证相关的请求头(Authorization),普通请求头(Headers),请求体等一系列HTTP常规参数。

2.2 请求脚本

Postman Sandbox 是一个 JavaScript 执行环境。

Postman 脚本分为以下两种:

预请求脚本(Pre-request Script)

测试脚本(Tests)

脚本使用场景

自动化校验请求的结果是否符合预期;

当接口数量较多并且一个请求的参数是另一个请求的结果(即存在依赖关系)时,脚本就可以我们一键获取参数,这个场景还需要配合 Environments 的环境变量实现。

脚本执行顺序

脚本使用举例

预请求脚本

实际场景描述:目前 trello 虚拟项目由于集成了 oauth2 集成认证中心,所有看板相关的业务接口都需要先获取一个 token;在测试业务接口时总是需要先手动请求 /api/auth/login获取 code 参数值,在复制 code 请求 /api/oauth2/token 接口获取 access_token。

脚本实现

java 复制代码
// var base_url = "http://10.205.18.51:8093/api";
var base_url = "http://" + pm.environment.get("ip") + ":8093/api";

// pm 就是内置的postman api对象,pm.sendRequest 方式是 http请求api,
// 可以类比前端的ajax等servlet工具,语法也基本和前端一直,除了请求体内的参数,需要根据 mode 属性确定请求体类型,并嵌套真实参数。
pm.sendRequest({
   url: base_url + "/auth/login",
   method: 'POST',
   header: {
       "Content-Type": "application/json"
   },
   body: {
       mode: 'raw',
       raw: JSON.stringify(
           {
               userName: "username",
               password: "password",
               clientId: "trello-auth"
           }
       )
   }
}, function (err, res) {
   let data = res.json();
   let code = data.data.code;
   // 将请求获取到的 code 更新到环境变量中
   pm.globals.set("code", code);
   // 这个请求就是 表单类型的 post请求
   pm.sendRequest({
       url:  base_url + "/oauth2/token",
       method: 'POST',
       header: {
           "Content-Type": "application/x-www-form-urlencoded",
           "Authorization": "Basic dHJlbGxvLWF1dGg6dHJlbGxvLWF1dGg="
       },
       dataType: "json",
       body: {
           mode: 'urlencoded',
           urlencoded: "grant_type=authorization_code&code=" + code + "&clientId=trello-auth"
       }
   }, function (err2, res2) {
       let data2 = res2.json();
       pm.globals.set("access_token", data2.access_token);
       pm.globals.set("refresh_token", data2.refresh_token);
   })
});

以上脚本位于请求的 Pre-request Script 脚本框中,具体如下图:

通过这样设置后,每次请求前会先执行预请求脚本,自动获取 code 和 access_token等参数,并保存到环境变量中。

然后在当前请求需要用到 token 参数的地方使用 {{ }} 获取环境变量,具体如上图。

测试脚本

更多测试脚本示例:

https://learning.postman.com/docs/writing-scripts/script-references/test-examples/

3. 集合管理(Collections)

集合可以理解为对一系列请求的分类,这个分类就比较灵活,一般可以根据所属服务分类,比如认证服务和看板服务,也可以根据功能分类,比如登录注册功能、看板crud等等,从归纳这个角度集合其实就是文件夹;

对于这样一个文件夹,postman 有提供了一系列操作,可以对同一集合下的接口列表做统一处理,这样就起到一个接口统一管理的作用。具体的集合操作有:分享、新建文件夹、批量导入导出、批量运行/测试、批量Mock等等。

说到接口管理,在高阶使用中还会进一步介绍 APIs的概念,APIs 模块实际上更贴近于对"接口管理"这样一个功能的定义,具体包括了关联集合,接口文档生成,接口版本定义,接口规范定义,接口状态管理等等功能。

集合运行测试

4. 环境管理(Environments)

环境管理这个模块其实很好理解,对应于实际项目中,我们也会有多个环境用于不同的作用,比如我们的 trello 项目就有 本地、Dev、UAT 三类环境,开发测试的不同阶段我们会用不同的环境来测试我们的接口表现是否符合预期。

二、高阶使用

1. APIs

https://learning.postman.com/docs/designing-and-developing-your-api/the-api-workflow/

2. Mock Servers

https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/mock-with-api/

3. Flows

https://learning.postman.com/docs/postman-flows/flows-intro/building-your-first-flow/

相关推荐
好_快26 分钟前
Lodash源码阅读-memoizeCapped
前端·javascript·源码阅读
好_快27 分钟前
Lodash源码阅读-toString
前端·javascript·源码阅读
好_快28 分钟前
Lodash源码阅读-memoize
前端·javascript·源码阅读
腾讯TNTWeb前端团队8 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
拉不动的猪11 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪11 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
uhakadotcom13 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom13 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom13 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom13 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试