【玩转 Postman 接口测试与开发2_015】第12章:模拟服务器(Mock servers)在 Postman 中的创建与用法(含完整实测效果图)

news2025/2/4 7:38:52

book cover for the 2nd version

《API Testing and Development with Postman》最新第二版封面

文章目录

  • 第十二章 模拟服务器(Mock servers)在 Postman 中的创建与用法
    • 1 模拟服务器的概念
    • 2 模拟服务器的创建
      • 2.1 开启侧边栏
      • 2.2 模拟服务器的两种创建方式
      • 2.3 私有模拟器的 API 秘钥的用法
    • 3 常见的模拟服务器用法演示
      • 3.1 Mock 服务器的工作原理
      • 3.2 模拟 GET 请求:生成指定的响应内容
      • 3.3 模拟报 500 错误码的请求
      • 3.4 模拟路径参数
      • 3.5 模拟从请求 JSON 中提取信息
      • 3.6 模拟 PUT 请求
      • 3.7 模拟第三方接口返回随机数据

写在前面
本章主要介绍了 Postman 中的模拟服务器(mock server)的基本用法。时隔四年,当初的操作界面和设置流程已经大大简化了,掌握了本章介绍的基本用法,再结合 Postman 官方文档的强大加持,模拟服务器这块基本可以在工作中胜任了。

第十二章 模拟服务器(Mock servers)在 Postman 中的创建与用法

本章概要

  • 模拟服务器的概念
  • Postman 创建模拟服务器的方法
  • Postman 设置模拟数据的方法

Postman 中的模拟服务器(mock server)经过不断地完善,现在已经比刚推出时好用很多了。本章内容看似很多,其实核心知识点只有几个。重点把握模拟服务器的工作原理和常见的数据模拟方法即可。


1 模拟服务器的概念

基本概念

  • 本书中的模拟服务器(mock server),特指 API 接口的模拟服务器;
  • 主要用途:模拟真实 API 服务器,可返回预设的 硬编码 响应。
  • 既可以模拟单一端点(简单),也可以模拟多个端点(复杂),复杂程度取决于要测试的目标。

Mock 服务器的常见应用场景:

  1. 目标应用引入了第三方 API,但又不想为了测试专门去调该接口;
  2. 前端需要测试,但后端接口尚未就绪时;
  3. 进行与后端隔开的 UI 测试时(假设架构支持),通过 Mock 服务器提高测试速度与稳定性;
  4. 需要模拟特定错误场景来测试前端的响应时。

其他注意事项:

  • Mock 服务器需要定期更新,以保持与真实服务的一致性。
  • 要确保模拟数据的准确性,避免测试结果出现偏差。
  • Postman 对普通用户仅提供每月累计 1000 次的模拟服务器总调用额度(注意:是对所有服务器的总调用次数),想要更多调用次数只能开通会员,或者换用其他免费帐号。

2 模拟服务器的创建

2.1 开启侧边栏

首先开启 Mock servers 侧边栏:

图 12.1 点击侧边栏配置图标,并开启 Postman 模拟服务器侧边栏

【图 12.1 点击侧边栏配置图标,并开启 Postman 模拟服务器侧边栏】

2.2 模拟服务器的两种创建方式

创建模拟服务器的方法主要有 两种

  1. 从专门的 Mock servers 侧边栏创建:

    img12.3

  2. Collection 测试集合中创建:

    img12.2

具体创建根据界面提示进行即可,都没有什么难度。

书中演示的是第一种,并且是从同步创建一个新的 Collection 集合开始:

图 12.2 Postman 模拟服务器创建页面详解

【图 12.2 Postman 模拟服务器创建页面详解】

2.3 私有模拟器的 API 秘钥的用法

最后一项可将该模拟服务器变为私有服务器,除非提供有效的 API 秘钥,否则任何人都无法访问。API 秘钥通过个人帐号的设置页(https://web.postman.co/settings/me/api-keys)创建:

图 12.3 设置私有模拟服务器时需要的 API 秘钥的创建页面截图

【图 12.3 设置私有模拟服务器时需要的 API 秘钥的创建页面截图】

创建好后,将秘钥存为一个变量(如 api_key),然后在测试请求的 Authorization 标签作如下配置即可:

图 12.4 用于访问私有模拟服务器的 API 秘钥的具体用法示例

【图 12.4 用于访问私有模拟服务器的 API 秘钥的具体用法示例】

3 常见的模拟服务器用法演示

3.1 Mock 服务器的工作原理

按照刚才的流程创建出 Mock 服务器后,Postman 会自动生成一个同名的 Collection 测试集合,并在该集合下创建一个名为 url 的变量存放其基础 URL,操作起来很轻松(Mock serverCollection 尽管同名,但各自的图标有所不同):

图 12.5 创建好 Mock 服务器后,Postman 会自动创建同名集合与 url 变量

【图 12.5 创建好 Mock 服务器后,Postman 会自动创建同名集合与 url 变量】

Postman 中使用 Mock 服务器,其实就是通过对 请求示例 的各种配置,实现各种想要的 响应效果

图 12.8 在 Postman 使用 Mock 服务器的基本流程

【图 12.8 在 Postman 使用 Mock 服务器的基本流程】

3.2 模拟 GET 请求:生成指定的响应内容

通过修改请求示例的状态码和响应正文(Body),可以模拟想要的响应内容:

图 12.9 修改请求示例的响应内容截图

【图 12.9 修改请求示例的响应内容截图】

注意,修改示例后 一定要保存,否则修改内容无法生效

另外,响应正文的 JSON 代码也支持 Alt + Shift + F 格式化,与 VSCode 一致,非常贴心。

3.3 模拟报 500 错误码的请求

除了模拟正常情况,还可以新增一个示例,模拟请求报 500 错误的情况。方法只需两步:

  1. 新建一个示例(Example),状态码改为 500,响应内容自拟;
  2. 在测试请求的请求头添加 x-mock-response-code 属性,值设为 500 即可;

示例的设置如下:

img12.10

对应的请求设置及测试结果如下:

img12.11

3.4 模拟路径参数

需求:从路径中获取 task_id,并将该信息放入响应正文中。

方法:

  1. 定义示例:

    1. URL 改为 {{url}}/tasks/{{task_id}}

    2. 状态码暂定 200;

    3. 在响应正文中通过以下语法引用 task_id

      {
        "description":"Mock Task {{task_id}}",
        "status":"Draft"
      }
      
  2. 修改测试请求:URL 直接写 {{url}}/tasks/{{task_id}} 即可。

实测情况:

图 12.10 路径参数的定义和获取该参数的写法示例

【图 12.10 路径参数的定义和获取该参数的写法示例】

图 12.11 实测请求参数的定义与捕获情况(符合预期)

【图 12.11 实测请求参数的定义与捕获情况(符合预期)】

3.5 模拟从请求 JSON 中提取信息

需求:从创建待办事项的 POST 请求体 JSON 中,提取 descriptionstatus 字段信息,并作为响应内容的一部分。

方法:

  1. 创建一个名为 Create TaskPOST 请求:URL 设为 {{url}}/tasks,状态栏填 201 Created,请求体的 JSON 内容如下:

    {
      "description": "Read this book",
      "status": "Draft",
      "created_by": "user1"
    }
    
  2. 再在该请求下创建一个同名示例 Create Task,其请求方式、URL、状态信息均与上述请求一致,唯独响应体内容不同:

    {
      "description": "{{ $body 'description' }}",
      "status": "{{ $body 'status' }}"
    }
    

    img12.14

  3. 保存示例,回到 POST 请求,发送请求即可看到如下效果:

    img12.15

重要提示

$body 是 Postman 引用请求体对象的固定写法;访问其中的某个属性要写成 {{ $body 'key_name' }} 的形式,并且为了返回正确的数据类型,括号两边必须加引号,这一点书中是忽略的,很容易出现类型报错。

3.6 模拟 PUT 请求

除了引用请求体的属性值,Postman 还支持对该属性设置默认值。例如,需要响应的 JSON 包含两个字段 descriptionstatus,示例还可以这样设置默认值:

{
    "description": "{{$body 'description' 'Mock Task {{task_id}}'}}",
    "status": "{{$body 'status' 'Draft'}}"
}

上述代码中,如果请求体的 description 字段有效,则使用该字段值,否则以默认值 "Mock Task {{task_id}}" 进行响应,这里的 {{task_id}} 即上面演示过的路径参数。同理,如果 status 能拿到有效值,则响应时返回对应的 status 属性值,否则按默认值 "Draft" 处理。

实测示例:

img12.16

实测请求1:两个属性值均有效

img12.17

实测请求2:仅 description 有效

img12.18

实测请求3:仅 status 有效

img12.19

注意

经实测,Postman 判定某个字段是否有效的方法,其实就是看该字段是否存在。如果存在,但赋值为 ""null"undefined",都会被视为有效值,如果不符合 JSON 语法规范,则会直接报 400 错误:

图 12.12 违反 JSON 语法规范强行发送请求,Postman 将按 400 报错处理

【图 12.12 违反 JSON 语法规范强行发送请求,Postman 将按 400 报错处理】

3.7 模拟第三方接口返回随机数据

Postman 内置了大量随机变量,以应对各种需要设置随机值的情况,例如城市名称 $randomCity、基于 uuid-v4 的唯一标识字符串 $guid 等,底层参考的是著名的第三方前端随机模块 Faker(详见:https://www.npmjs.com/package/@faker-js/faker)。更多内置变量列表及用法,详见 Postman 官方文档:https://learning.postman.com/docs/tests-and-scripts/write-scripts/variables-list/。

书中给出的示例写法为:

{
    "country": "US",
    "city": "{{$randomCity}}",
    "language": "en_US",
    "street": "{{$randomStreetAddress}}",
    "Currency": "USD",
    "id": "738964000000291009",
    "state": "New York",
    "first_name": "{{$randomFirstName}}",
    "email": "{{$randomEmail}}",
    "zip": 12345,
    "created_time": "{{$randomDateRecent}}",
    "last_name": "{{$randomLastName}}",
    "time_zone": "GMT",
    "phone": "{{$randomPhoneNumber}}",
    "dob": "{{$randomDatePast}}",
    "status": "active"
}

可以得到如下结果:

{
  "country": "US",
  "city": "East Hardyshire",
  "language": "en_US",
  "street": "73801 Isadore Villages",
  "Currency": "USD",
  "id": "738964000000291009",
  "state": "New York",
  "first_name": "Kylie",
  "email": "Piper1@hotmail.com",
  "zip": 12345,
  "created_time": "Sun Feb 02 2025 20:49:40 GMT+0000 (Coordinated Universal Time)",
  "last_name": "Purdy",
  "time_zone": "GMT",
  "phone": "676-353-0567",
  "dob": "Thu Jan 09 2025 19:30:06 GMT+0000 (Coordinated Universal Time)",
  "status": "active"
}

实测截图:

img12.21

img12.22

注意

Postman 中的内置随机变量还可以用在测试脚本中,通过 pm.variables.replaceIn() 函数进行访问,例如:pm.variables.replaceIn('{{$randomFirstName}}'),实测效果如下:

图 12.13 实测内置随机变量在 Post-response 测试脚本中的用法

【图 12.13 实测内置随机变量在 Post-response 测试脚本中的用法】


由此也可以看出引号的重要作用,千万不可忽略(感觉作者在这个细节上做得很不够,多次出现漏掉引号的情况)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql操作语句与事务

数据库设计范式 数据库设计的三大范式 ‌第一范式(1NF)‌:要求数据库表的每一列都是不可分割的原子数据项,即列中的每个值都应该是单一的、不可分割的实体。例如,如果一个表中的“地址”列包含了省、市、区等多个信息…

基于SpringBoot电脑组装系统平台系统功能实现五

一、前言介绍: 1.1 项目摘要 随着科技的进步,计算机硬件技术日新月异,包括处理器(CPU)、主板、内存、显卡等关键部件的性能不断提升,为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…

【智力测试——二分、前缀和、乘法逆元、组合计数】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int mod 1e9 7; const int N 1e5 10; int r[N], c[N], f[2 * N]; int nr[N], nc[N], nn, nm; int cntr[N], cntc[N]; int n, m, t;void init(int n) {f[0] f[1] 1;for (int i …

玉米苗和杂草识别分割数据集labelme格式1997张3类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;1997 标注数量(json文件个数)&#xff1a;1997 标注类别数&#xff1a;3 标注类别名称:["corn","weed","Bean…

string例题

一、字符串最后一个单词长度 题目解析&#xff1a;由题输入一段字符串或一句话找最后一个单词的长度&#xff0c;也就是找最后一个空格后的单词长度。1.既然有空格那用我们常规的cin就不行了&#xff0c;我们这里使用getline,2.读取空格既然是最后一个空格后的单词&#xff0c;…

设计模式 - 行为模式_Template Method Pattern模板方法模式在数据处理中的应用

文章目录 概述1. 核心思想2. 结构3. 示例代码4. 优点5. 缺点6. 适用场景7. 案例&#xff1a;模板方法模式在数据处理中的应用案例背景UML搭建抽象基类 - 数据处理的 “总指挥”子类定制 - 适配不同供应商供应商 A 的数据处理器供应商 B 的数据处理器 在业务代码中整合运用 8. 总…

基于脉冲响应不变法的IIR滤波器设计与MATLAB实现

一、设计原理 脉冲响应不变法是一种将模拟滤波器转换为数字滤波器的经典方法。其核心思想是通过对模拟滤波器的冲激响应进行等间隔采样来获得数字滤波器的单位脉冲响应。 设计步骤&#xff1a; 确定数字滤波器性能指标 将数字指标转换为等效的模拟滤波器指标 设计对应的模拟…

RabbitMQ快速上手及入门

概念 概念&#xff1a; publisher&#xff1a;生产者&#xff0c;也就是发送消息的一方 consumer&#xff1a;消费者&#xff0c;也就是消费消息的一方 queue&#xff1a;队列&#xff0c;存储消息。生产者投递的消息会暂存在消息队列中&#xff0c;等待消费者处理 exchang…

自动化构建-make/Makefile 【Linux基础开发工具】

文章目录 一、背景二、Makefile编译过程三、变量四、变量赋值1、""是最普通的等号2、“:” 表示直接赋值3、“?” 表示如果该变量没有被赋值&#xff0c;4、""和写代码是一样的&#xff0c; 五、预定义变量六、函数**通配符** 七、伪目标 .PHONY八、其他常…

响应式编程与协程

响应式编程与协程的比较 响应式编程的弊端虚拟线程Java线程内核线程的局限性传统线程池的demo虚拟线程的demo 响应式编程的弊端 前面用了几篇文章介绍了响应式编程&#xff0c;它更多的使用少量线程实现线程间解耦和异步的作用&#xff0c;如线程的Reactor模型&#xff0c;主要…

智能小区物业管理系统推动数字化转型与提升用户居住体验

内容概要 在当今快速发展的社会中&#xff0c;智能小区物业管理系统的出现正在改变传统的物业管理方式。这种系统不仅仅是一种工具&#xff0c;更是一种推动数字化转型的重要力量。它通过高效的技术手段&#xff0c;将物业管理与用户居住体验紧密结合&#xff0c;无疑为社区带…

从Proxmox VE开始:安装与配置指南

前言 Proxmox Virtual Environment (Proxmox VE) 是一个开源的虚拟化平台&#xff0c;基于Debian Linux&#xff0c;支持KVM虚拟机和LXC容器。它提供了一个强大的Web管理界面&#xff0c;方便用户管理虚拟机、存储、网络等资源。Proxmox VE广泛应用于企业级虚拟化、云计算和开…

【C++】B2115 密码翻译

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目解析&#x1f4af;1. 老师的做法代码实现&#xff1a;思路解析&#xff1a; &#x1f4af;2. 我的做法代码实现&#xff1a;思路分析&#xff1a; &#x1f4af;3. 老师…

Leetcode—598. 区间加法 II【简单】

2025每日刷题&#xff08;206&#xff09; Leetcode—598. 区间加法 II 实现代码 class Solution { public:int maxCount(int m, int n, vector<vector<int>>& ops) {int ans m * n;int x ops.size();if(ops.empty()) {return ans;}int xm ops[0][0], ym …

OpenCV:图像轮廓

目录 简述 1. 什么是图像轮廓&#xff1f; 2. 查找图像轮廓 2.1 接口定义 2.2 参数说明 2.3 代码示例 2.4 运行结果 3. 绘制图像轮廓 3.1 接口定义 3.2 参数说明 3.3 代码示例 3.4 运行结果 4. 计算轮廓周长 5. 计算轮廓面积 6. 示例&#xff1a;计算图像轮廓的面…

文字显示省略号

多行文本溢出显示省略号

Cosmos - 世界模型开发平台

文章目录 一、关于 Cosmos主要特点模型家族 二、使用示例1、推理2、后训练 许可证和联系方式 一、关于 Cosmos NVIDIA Cosmos是开发者第一的世界基础模型平台&#xff0c;旨在帮助物理AI开发者更好、更快地构建他们的物理AI系统。宇宙包含 预训练模型&#xff0c;可通过拥抱脸…

图像分割中根据mask的ROI,去除mask和image中没有勾画ROI层数以外的图像

在分割任务中&#xff0c;一个患者有很多层图像&#xff0c;但是勾画的ROI仅有那么几层。我想去除ROI以外层数的那些没用的图像。这里以一个36张图像的nii格式数据为例 查看一下mask文件中有多少个非0图像 import nibabel as nib import numpy as np# 加载 .nii 文件 file_pat…

全栈开发:使用.NET Core WebAPI构建前后端分离的核心技巧(一)

目录 cors解决跨域 依赖注入使用 分层服务注册 缓存方法使用 内存缓存使用 缓存过期清理 缓存存在问题 分布式的缓存 cors解决跨域 前后端分离已经成为一种越来越流行的架构模式&#xff0c;由于跨域资源共享(cors)是浏览器的一种安全机制&#xff0c;它会阻止前端应用…

springboot使用rabbitmq

使用springboot创建rabbitMQ的链接。 整个项目结构如下&#xff1a; 1.maven依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>3.4.1</version> </dependency>application.y…