如何使用Postman做接口自動化測試

🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快?

本文適合已經掌握 Postman 基本用法的讀者,即對接口相關概念有一定了解、已經會使用 Postman 進行模擬請求等基本操作。
工作環境與版本:

  • Window 7(64位)
  • Postman (Chrome App v5.5.3)
    P.S. 不同版本頁面 UI 和部分功能位置會有點不同,不過影響不大。
    首先我們來思考一下,如果要達到自動化接口測試效果,在基本的模擬請求上還需要做哪些呢?
    我粗略概括為 3 個問題(歡迎在評論區留言更多補充建議):
  1. 如何判斷接口是否請求成功?
  2. 如何進行接口批量、定期測試?
  3. 如何處理依賴接口問題(比如商品下單的接口必須要求先登錄)?
    所以,接下來就主要分為 3 個部分,介紹如何解決這 3 個問題。
    首先,既然是自動化測試,那么我們肯定需要通過工具 Postman 或者代碼,幫我們直接判斷結果是否符合預期。那么在接口測試上,大體就兩個思路:
  4. 判斷請求返回的 code 是否符合預期

判斷請求返回的內容中是否包含預期的內容(關鍵字)
接下來我們看看如何利用 Postman 來解決上述的問題:
在 Postman 中相關的功能在非常顯眼的地方,Tests 功能的使用需要我們有一定的編程語言基礎,目前支持的腳本語言即為 JavaScript 。但比較好的一點是,我們不需要再去考慮上下文問題以及運行環境的問題 ,也就是說我們只需要在這邊完成結果邏輯判斷的代碼塊即可。
而 Postman 還為我們提供了一些常用的代碼模板,在 Tests 面板右邊的 SNIPPETS 功能區中,所以對 JavaScript 不大了解問題也不大。代碼編寫相關將在下文進行具體介紹。

先看上圖的代碼部分,我們可以發現 responseCode 、 responseBody 和 tests 三個變量(可直接使用) :

  • responseCode :包含請求的返回的狀態信息(如:code)。
  • responseBody:為接口請求放回的數據內容(類型為字符串)。
  • tests :為鍵值對形式,用于表示我們的測試結果是成功與否,最終展示在 Test Results 中。
  • key :(如:code 200)我們可以用來當做結果的一個描述。
  • value:其值為布爾型,ture 表示測試通過, false 表示測試失敗。
    所以上述代碼應該不難理解了,而有了返回結果的數據以及表示結果成功與否的方式,那么我們“接口結果判斷”的問題也就基本解決了。
    另外還有幾個比較常用的:
  • responseTime :請求所耗時長
  • postman :可以做的比較多,比如
  • 獲取返回數據的頭部信息:
    postman.getResponseHeader("")

設置全局變量:
postman.setGlobalVariable("variable_key", "variable_value");
更多功能可以查看官方文檔。
Postman 在 SNIPPETS 功能區中為我們提供的代碼模板已經能解決大部分情況了,以下先挑幾個跟結果判斷相關的進行講解:
Status code : Code is 200
Response body: Contains string
Response body: is equal to string
Response body: JSON value check
Response time is less than 200ms
以上介紹的這些基本已經足夠完成對單一接口的測試了,但我們知道如果沒有批量、定時任務, 那么這些都將毫無意義,所以繼續 …
想要進行接口的批量測試、管理,那么我們需要將待測試的接口全部都保存到同一個集合(Collections)中,你可以認為就是保存到同一個文件夾中。先看看 Postman 中的操作步驟:

通過以上步驟,我們得到一個待測的接口集合,為了簡化情況,我這邊每個接口成功與否的條件都是用 code 是否為 200 來判斷:
以上準備就緒后,我們就可以開始批量運行接口進行測試了:

點擊Run 后,會新打開一個頁面:

  • Environment :用于切換接口運行的環境,這里先不管,后面再講
  • Iteration :用于設置接口一共要運行的次數。
  • Delay : 設置每次運行接口之間的時間間隔,單位為毫秒。

Data File : 上傳測試數據文件 (下文單獨講)
我們已經了解了,如何讓多個接口循環運行多次,但是現在有個問題,按目前這個步驟,每次運行時接口的參數都是一樣的,那么就算我們運行個100次、1000次意義也不大。
先看看我們寫好的一個登錄功能的接口:

現在登錄的賬號和密碼參數都是寫死的,也就是不過我們執行多少次,都是拿這個賬號去測試。那么如果想要測試賬號密碼參數使用其它值有沒有異常怎么辦呢?( 想要每次都手動改的可以跳過這部分 /手動滑稽)這里我們先簡單講一下在 Postman 中使用如何“變量”,如下圖:

引用一個變量的語法:{{變量名}}, 圖中可以看到,我們將賬戶和密碼字段的參數值都設置為變量:{{username}} 、{{password}} 。修改完直接點擊運行 (Send) 當然是不行的,因為目前這兩個變量還未被賦值,不過我們可以在 Pre-request Script 面板中進行賦值操作:
Pre-request Script 與 Tests 類似,區別在于:Pre-request Script 中的腳本是在執行請求之前運行,而Tests 中的腳本則是在請求完成之后執行。所以,我們可以在 Pre-request Script 功能區中用腳本先個上面兩個變量進行賦值,如:
但是用 Pre-request Script 進行賦值操作仍然不能解決我們的問題,因為按照這種寫法,不論運行多少次其實都還是用固定(寫死)的數據進行測試。當然既然是腳本語言,也會有更靈活的用法,這邊先不將。
接下來我們講講 Data File , 在運行集合前的這個選項就是用來上傳測試數據(文件)以賦值給相應變量的。我們先以 CSV 格式的測試數據為例:
數據格式類似表格,第一行表示對應的變量名,下面 4 行表示 4 組賬號密碼數據(其中兩組為正確數據) ,我們保存一份內容為上述示例數據后綴名為.csv 的文件后,再次開始測試看看效果,我們選擇運行次數為 4 (對應 4 組測試數據)、選擇對應的 CSV 文件運行后,可以看到我們的結果確實如我們的預期。接口 Request 運行的結果為兩次成功兩次失敗,也就是每一次運行都賦值了不同的賬號密碼的測試數據 (在最新的桌面客戶端版本中可以看到每次具體的請求情況,這邊就不再細說了)。
如果使用 Json 文件的話,那么格式如下:
Postman 提供了一個 Monitors (監視器)功能,支持我們提交一個測試任務,按照設置的定時器進行運行,如每小時測試一次,具體操作如下:

講完接口結果判斷和集合批量測試后,我們再來看看比較復雜的情況,即依賴請求問題,比如我們的購物下訂單接口要求必須先登錄后才可訪問。但大部分依賴問題其實本質上就是一個接口間數據傳遞的問題,比如調用登錄接口后返回一個標識,假設為 token ,那么我們請求下訂單接口時只要一起攜帶 token 參數進行請求即可。所以,問題變為:

  • 保證接口調用順序

將接口A返回的數據傳遞給后續的接口B、C、D
首先,說明一下,接下來說的接口都是默認屬于同一個集合 (Collections) 中的。
還是以我們上文中創建好接口集合為例,如果你有注意我們執行批量測試的結果,就會發現接口的執行順序其實就是按照這邊目錄中的順序(從上到下),即: Request1 -> Request2 -> Request3。

所以有了這個默認的執行順序后,那么我們便可以把需要優先執行的接口放前面即可,比如把“登錄接口”放在第一個。
當然,如果只有默認的一個執行順序的話,通常沒法滿足我們復雜的業務需求,所以 Postman 為我們提供了一個函數:postman.setNextRequest(“填寫你要跳轉的接口名”) ,支持我們跳轉到指定接口繼續執行,舉個例子:
我們在運行完 Request1 接口成功后,不需要再運行 Request2 而是直接跳至 Request3 ,那么我可以在 Request1 接口的 Tests 功能區中執行跳轉代碼,如:

這里需要注意幾點:

  1. postman.setNextRequest() 只在運行集合測試的時候生效,也就是說我們單獨運行 (Send) 接口Request1 時,函數是不起作用的。

  2. 當我們運行集合測試成功從 Request1 -> Request3 后,如果 Request3 后面還有接口,那么后面的接口仍然繼續按默認順序執行,即圖中的接口 Request4 仍會被執行。

  3. 指定的跳轉接口必須屬于同一個集合中。

  4. setNextRequest() 函數不管在 Tests 腳本中何處被調用,它都只在當前腳本最后才被真正執行。比如我們將圖中的第二行與第一行互調后,那么在運行跳轉函數后第二行代碼仍會被執行。
    所以,利用 setNextRequest() 函數,我們便可以按照條件跳過不必要的接口,或者建立我們自己的一個邏輯測試。
    在講數據傳遞前,先聊聊 Postman 中全局變量、環境切換的使用。
    全局變量的概念其實我們在上文中講 Pre-request Script 時有簡單提到,也就是說我們可以通過腳本代碼來設置全局變量,我們可以看看運行上文的腳本后的效果:
    我們可以看到運行后,username 和 password 兩個變量已經被成功保存下來,那么我們在任意接口中便都可以通過變量引用的語法如:{{username}} 來使用它們。
    另外,Postman 不僅支持代碼設置全局變量的方式,它還支持可視化操作:

進入對應界面后,便可直接進行管理:

通常情況下,我們的接口都會分為測試版本和線上版本(或者更多),而他們的區別可能僅是 ULR 不同,那么全局變量便不大合適解決這個問題。
可能你已經注意到,上圖中我已經建有幾個不同環境的參數“集合”了,再看一下:

我在每個環境中都創建了一個 host 參數,如:

當然,我們的環境參數也可以通過腳本的方式來進行設置,函數為:
環境“參數集” 中的參數使用方式和全局變量一致,如圖中 {{host}} ,不同環境的切換見下圖:

掌握以上的預備知識后,我們開始看看如何用 Postman 解決存在依賴關系的接口測試。
我們的接口 Request1 為登錄接口,登錄成功將會返回一個 access_token 字段作為標識(已實現)。那么假設接口 Request3 為一個下訂單的接口,需要攜帶登錄返回的 access_token 才能正常訪問。

  1. 保證 Request1 在 Request3 之前被運行
  2. 將 Request1 返回的 access_token 的值添加到環境變量"參數集"中。
  3. Request3 在請求時引用 access_token 的值
  4. 我們目錄中已保證 Request1 接口優先執行
  5. Request1 中 Tests 的代碼情況:

在接口 Request3 中使用變量 token :

運行集合測試,可以看到我們結果符合我們的預期,Request1 和 Request3 通過測試,Request2 被跳過,Request4 仍被執行。Done…

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87043.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87043.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87043.shtml

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

相關文章

ELK日志文件分析系統——E(Elasticsearch)

目錄 基本概念 一、架構設計 二、核心原理 三、關鍵特性 四、應用意義 部署步驟 ?一、環境準備? ?二、安裝 Elasticsearch? ?三、關鍵配置(elasticsearch.yml)? ?四、啟動與驗證? ?五、集群擴展(新增節點)? …

融智學教育觀及其數學公式體系凝練匯總

摘要:本文系統闡述了鄒曉輝教授的融智學教育觀,通過原創數學公式體系構建了人機協同教育模型。核心內容包括:認知本體論(文明智慧當量方程)、方法論(七遍通訓練算子)、生態位控制論(…

互聯網大廠Java求職面試:AI大模型應用實踐中的架構挑戰與實戰

互聯網大廠Java求職面試:AI大模型應用實踐中的架構挑戰與實戰 引言 在當今技術飛速發展的時代,AI大模型已成為企業數字化轉型的重要引擎。無論是內容生成、智能客服、個性化推薦,還是知識圖譜構建和語義理解,大模型的應用場景正在…

龜兔賽跑算法(Floyd‘s Cycle-Finding Algorithm)尋找重復數

龜兔賽跑算法(Floyd’s Cycle-Finding Algorithm)尋找重復數 問題描述 給定一個長度為 N1 的數組 nums,其中每個元素的值都在 [1, N] 范圍內。根據鴿巢原理,至少有一個數字是重復的。請找出這個重復的數字。 要求: …

紫光展銳T8300以創新音頻技術重塑感知世界

數字化時代,從語音通話到智能交互,從聆聽音樂到創作Vlog,聲音已成為隱形的基礎措施。日益發展的音頻技術正在重構用戶感知世界的方式,重塑用戶的聽覺體驗。 T8300是紫光展銳專為全球主流用戶打造的5G SoC,采用了紫光展…

寫作詞匯積累(A):頗有微詞、微妙(“微”字的學習理解)

一、頗有微詞 1、基本介紹 【頗有微詞】指對某人或某事有輕微的批評、不滿或不同意見,但表達得含蓄委婉 【頗】表示程度較深,【微詞】表示隱晦的批評 【微】表示隱晦的、不直白的,強調批評的委婉性 2、使用實例 1、盡管公司的新考勤制度…

flowable工作流的學習demo

1.spring 部署流程 刪除部署 查看歷史信息 加載一個默認的配置文件 里面包含用戶名和數據庫信息 加載自定義的配置文件 flowable.cfg.xml <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance…

XCTF-misc-can_has_stdio?

下載得到一個文件 ┌──(kali?kali)-[~] └─$ file misc50 misc50: ASCII text, with very long lines (536)┌──(kali?kali)-[~] └─$ cat misc50 …

【編譯工具】(自動化)AI 賦能的自動化測試工具:如何讓測試效率提升 500% 并實現智能質檢?

#『編程工具』提升效率征文挑戰賽# 目錄 引言&#xff1a;AI 如何重塑自動化測試格局 一、新一代 AI 測試工具核心能力解析 二、實戰演示&#xff1a;Testim 智能測試平臺 &#xff08;1&#xff09;智能錄制測試流程 ① 步驟演示 ② AI 元素定位原理 &#xff08…

毛紀逆向分析

文章目錄 毛紀逆向分析前言知識系統整體架構概述模塊分析模塊0模塊1模塊2模塊3模塊4模塊5總結毛紀逆向分析 對爬蟲、逆向感興趣的同學可以查看文章,一對一小班教學(系統理論和實戰教程)、提供接單兼職渠道:https://blog.csdn.net/weixin_35770067/article/details/142514698…

【力扣 簡單 C】141. 環形鏈表

目錄 題目 解法一&#xff1a;哈希 解法二&#xff1a;快慢指針 題目 解法一&#xff1a;哈希 struct node {struct ListNode* val;struct node* next; };struct hashSet {struct node** bucket;int size; };struct hashSet* hashSetInit(int size) {struct hashSet* hashS…

Eureka 服務注冊與發現原理和使用

1.Eureka 基礎概念 Eureka 是 Netflix 開發的服務注冊與發現組件&#xff0c;是 Spring Cloud 微服務架構中的核心模塊&#xff0c;用于解決微服務間的自動發現與通信問題。其核心功能包括&#xff1a; 服務注冊&#xff1a;服務實例將自身信息&#xff08;IP、端口、健康狀態等…

create_react_agent + MCP tools

文章目錄 MCP tools 調用結果輸出MCP Tool 內容成功返回失敗返回 普通工具調用 https://blog.csdn.net/2401_89025022/article/details/148629902 MCP tools 調用 import time import asyncio import json from langgraph.prebuilt import create_react_agent from langch…

提示詞Prompts(1)

摘要&#xff1a; 本文介紹了langchain.prompts中基礎的提示詞模板的用法&#xff0c;包括基礎的文本模板、對話模板、小樣本模板、以及主要兩種樣本選擇器的用法。 文章目錄 1. prompts介紹&#xff1f;2. 提示詞模板體系 Prompt Templates2.1 基礎文本模板 PromptTemplate2.2…

如何在 Elementary OS 上安裝最新版本的 VirtualBox

Elementary OS 是一個基于 Ubuntu Linux 的發行版&#xff0c;它易于使用&#xff0c;對初學者友好&#xff0c;并且在用戶中非常受歡迎。如果你是 Elementary OS 的用戶&#xff0c;并且想在上面虛擬運行和探索其他操作系統&#xff0c;那么 Oracle VirtualBox 是一個非常不錯…

uni-app項目loading顯示方案

前情 uni-app是我比較喜歡的跨平臺框架&#xff0c;它能開發小程序/H5/APP(安卓/iOS)&#xff0c;重要的是對前端開發友好&#xff0c;自帶的IDE可視化的運行和打包也讓開發體驗也非常棒&#xff0c;公司項目就是主推uni-app&#xff0c;為了用戶體驗對于耗時操作&#xff0c;…

【Android筆記】記一次 CMake 構建 Filament Android 庫的完整排錯過程(安卓交叉編譯、CMake、Ninja)

寫在前面的話&#xff0c;為了保持Sceneform-EQR始終是采用最新的filament&#xff0c;每隔一段時間我都會編譯filament&#xff0c;并根據新增內容完善Sceneform-EQR。 現由于更換電腦&#xff0c;環境需重新配置。簡單記錄下編譯出錯和解決方式。 Sceneform-EQR 是EQ對谷歌“…

ARM 單片機定義變量絕對地址方法

在ARM單片機中&#xff0c;定義變量到絕對地址通常有以下幾種方法&#xff08;以Keil MDK為例&#xff0c;其他工具鏈原理類似&#xff09;&#xff1a; 方法1&#xff1a;使用指針強制轉換&#xff08;通用&#xff09; 直接通過指針訪問指定地址&#xff1a; define REGIS…

為何AI推理正推動云計算從集中式向分布式轉型

作者簡介&#xff1a;Vineeth Varughese是Akamai亞太及日本地區的云產品市場負責人&#xff0c;在云計算、人工智能&#xff08;AI&#xff09;及市場進入策略&#xff08;GTM&#xff09;領域擁有豐富經驗。 傳統云平臺在利用海量數據訓練AI模型方面表現出色&#xff0c;但隨著…

ar 導航導覽技術如何實現的?室內外融合定位與ar渲染技術深度解析

本文面向&#xff1a;移動開發工程師、AR技術研究者、室內外導航系統產品經理&#xff0c;旨在提供核心問題的參考方案&#xff1a;如何實現室內外無縫切換的精準定位&#xff08;GPS藍牙Beacon&#xff09;虛擬導航路徑與實景畫面的實時疊加原理。 如需獲取ar導航導航技術解決…