【玩轉 Postman 接口測試與開發2_015】第12章:模擬服務器(Mock servers)在 Postman 中的創建與用法(含完整實測效果圖)

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.pswp.cn/web/67823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67823.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【算法】回溯算法專題③ ——排列型回溯 python

目錄 前置小試牛刀回歸經典舉一反三總結 前置 【算法】回溯算法專題① ——子集型回溯 python 【算法】回溯算法專題② ——組合型回溯 剪枝 python 小試牛刀 全排列 https://leetcode.cn/problems/permutations/description/ 給定一個不含重復數字的數組 nums ,返…

8.原型模式(Prototype)

動機 在軟件系統中,經常面臨著某些結構復雜的對象的創建工作;由于需求的變化,這些對象經常面臨著劇烈的變化,但是它們卻擁有比較穩定一致的接口。 之前的工廠方法和抽象工廠將抽象基類和具體的實現分開。原型模式也差不多&#…

LabVIEW如何高頻采集溫度數據?

在LabVIEW中進行高頻溫度數據采集時,選擇合適的傳感器(如熱電偶或熱電阻)和采集硬件是關鍵。下面是一些建議,幫助實現高效的溫度數據采集: 1. 傳感器選擇: 熱電偶(Thermocouple)&am…

Kotlin 委托詳解

Kotlin 委托詳解 引言 Kotlin 作為一種現代化的編程語言,在 Android 開發等領域得到了廣泛的應用。在 Kotlin 中,委托(Delegation)是一種強大的特性,它可以讓我們以更簡潔的方式實現代碼的復用和擴展。本文將詳細解析…

npm 和 pip 安裝中常見問題總結

安裝路徑的疑惑:NPM 和 PIP 的安裝機制 NPM 安裝路徑規則: 依賴安裝在項目目錄下: 當你運行 npm install --save-dev jest,它會在當前目錄(例如 F:\)下創建一個 node_modules 文件夾,把 jest 安…

人工智能:農業領域的變革力量

在當今科技飛速發展的時代,人工智能正以前所未有的態勢滲透進各個領域,農業也不例外。想象一下,未來的農田里,農民不再是彎腰勞作的形象,而是坐在高科技的“智能農場”里,悠閑地喝著咖啡,指揮著…

LLM的Deep Research功能:重構人類認知與創新的新范式

在人工智能迅速發展的今天,大語言模型(LLM)的deep research功能正在成為重構人類認知方式的關鍵力量。 這一突破性的技術進展不僅帶來了工具層面的革新,更深刻地觸及了人類認知能力的本質。 本文將從認知科學的視角出發&#xf…

【Cadence仿真技巧學習筆記】求解65nm庫晶體管參數un, e0, Cox

在設計放大器的第一步就是確定好晶體管參數和直流工作點的選取。通過閱讀文獻,我了解到L波段低噪聲放大器的mos器件最優寬度計算公式為 W o p t . p 3 2 1 ω L C o x R s Q s p W_{opt.p}\frac{3}{2}\frac{1}{\omega LC_{ox}R_{s}Q_{sp}} Wopt.p?23?ωLCox?Rs…

前端力扣刷題 | 6:hot100之 矩陣

73. 矩陣置零 給定一個 m x n 的矩陣,如果一個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 法一: var setZeroes function(matrix) {let setX new Set(); // 用于存儲需要置零的行索引let setY new Set(); //…

每日一題——有效括號序列

有效括號序列 題目描述數據范圍:復雜度要求: 示例題解代碼實現代碼解析1. 定義棧和棧操作2. 棧的基本操作3. 主函數 isValid4. 返回值 時間和空間復雜度分析 題目描述 給出一個僅包含字符 (, ), {, }, [, ] 的字符串,判斷該字符串是否是一個…

集合通訊概覽

(1)通信的算法 是根據通訊的鏈路組成的 (2)因為通信鏈路 跟硬件強相關,所以每個CCL的庫都不一樣 芯片與芯片、不同U之間是怎么通信的!!!!!! 很重要…

紅黑樹的封裝

一、封裝思路 在 STL 中 map set 的底層就是封裝了一棵紅黑樹。 其中連接紅黑樹和容器的是迭代器,map set 暴露出的接口都不是自己寫的,而是紅黑樹寫的,外部接口封裝紅黑樹接口。 所以寫出紅黑樹為 map set 寫的接口,再在上層的…

java異常處理——try catch finally

單個異常處理 1.當try里的代碼發生了catch里指定類型的異常之后,才會執行catch里的代碼,程序正常執行到結尾 2.如果try里的代碼發生了非catch指定類型的異常,則會強制停止程序,報錯 3.finally修飾的代碼一定會執行,除…

使用QMUI實現用戶協議對話框

使用QMUI實現用戶協議對話框 懶加載用于初始化 TermServiceDialogController 對象。 懶加載 lazy var 的作用 lazy var dialogController: TermServiceDialogController {let r TermServiceDialogController()r.primaryButton.addTarget(self, action: #selector(primaryC…

C++進階: 紅黑樹及map與set封裝

紅黑樹總結整理 紅黑色概述: 紅黑樹整理與AVL樹類似,但在對樹的平衡做控制時,AVL樹會比紅黑樹更嚴格。 AVL樹是通過引入平衡因子的概念進行對樹高度控制。 紅黑樹則是對每個節點標記顏色,對顏色進行控制。 紅黑樹控制規則&…

在Qt中,slots 關鍵字有什么用?

有下面的Qt代碼&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr…

列表標簽(無序列表、有序列表)

無序列表 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…

Kanass基礎教程-創建項目

Kanass是一款國產開源免費的項目管理工具&#xff0c;工具簡潔易用&#xff0c;開源免費&#xff0c;之前介紹過kanass的一些產品簡介及安裝配置方法&#xff0c;本文就從如何創建第一個項目來開始kanass上手之旅吧。 1. 創建項目 點擊項目->項目添加 按鈕進入項目添加頁面…

【Numpy核心編程攻略:Python數據處理、分析詳解與科學計算】2.10 ndarray內存模型:從指針到緩存優化

2.10 ndarray內存模型&#xff1a;從指針到緩存優化 目錄 #mermaid-svg-p0zxLYqAnn59O2Xe {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-p0zxLYqAnn59O2Xe .error-icon{fill:#552222;}#mermaid-svg-p0zxLYqAnn59O…

80-《紅球姜》

紅球姜 紅球姜&#xff08;學名&#xff1a;Zingiber zerumbet (L.) Smith&#xff09;是姜科姜屬多年生草本植物&#xff0c;根莖塊狀&#xff0c;株高可達2米。葉片披針形至長圓狀披針形&#xff0c;無柄或短柄&#xff1b;總花梗長可達30厘米&#xff0c;花序球果狀&#xf…