博文說明
這篇博文是我最近在微信公眾號“碼匠筆記”中看到的文章,原創作者為:雨滴測驗,非本人所寫,Postman也是我們Java做web開發、介面測驗中經常使用到的一款前后端介面測驗插件,因文章放在微信公眾號(原博文在今日頭條),個人感覺寫的非常好也很全面,這里作為引薦,本著開源傳播學習的精神,同時也向原文作者致敬!
在開篇做統一宣告:本文以下所有內容均轉載至微信公眾號“碼匠筆記”,文末會給出所有原文鏈接,本文僅做學習及日常分享好文匯總,
1.前言
postman是一款支持http協議的介面除錯與測驗工具,其主要特點就是功能強大,使用簡單且易用性好 ,
無論是開發人員進行介面除錯,還是測驗人員做介面測驗,postman都是我們的首選工具之一 ,那么接下來就介紹下postman到底有哪些功能,它們分別都能干些什么 ,下面先通過一張圖來直觀的來看下postman中所包含的功能 ,

當然,以上功能也只是展示了postman的一部分功能,為了能更加全面的體現這款工具的特點,我將從以下三個維度來加以說明,它們分別是:
基礎功能
- 常見型別的介面請求
- 介面回應資料的決議
- 介面管理(Collection)
- 批量執行介面請求
- 日志除錯
- 斷言
- 變數
- 請求前置腳本
- 介面關聯
- 常見的回傳值獲取
便捷功能快
- 速填寫查詢引數
- 快速填寫請求頭資訊
- 快速實作添加一個請求
- 如何繼承集合認證
- 批量斷言
- 快速查詢和替換
高級功能
- 讀取檔案進行引數化
- 生成測驗報告
- 代碼中發送請求
- 撰寫介面檔案
- mock服務
- 監控
- 使用作業空間
- 代碼同步與分支管理
- 連接資料庫
- apis
2.postman安裝說明
postman 在 2018 年之后就不再支持瀏覽器版本,所以,想要使用它就必須先下載客戶端再安裝使用,下面就以 Windows 系統為例進行安裝 ,
2.1.下載與安裝
postman安裝步驟:
1. 訪問postman官方網站,下載最新版本訪問地址:https://www.getpostman.com/
2. 進入到下載頁面,根據自己電腦下載對應的版本

3. 雙擊下載的安裝包,進入到安裝界面,直到用戶登錄和注冊界面,
若個人使用,選擇跳過即可,這時會進入到postman主界面,至此postman安裝成功(下圖),
若團隊使用,可以進行注冊,注冊后使用賬號可以加入團隊作業區

2.2.界面導航說明
初次使用postman的朋友可能對界面上的一些元素不太熟悉,下面就通過一張圖來說明這些元素的含義 ,

2.3.發送第一個請求
如果你是第一次使用postman發送請求,下面這個例子可以作為一個最基本的入門,可以幫我們建立一個初始印象 ,
1. 打開postman,點擊+加號打開一個新的請求頁,
2. 在請求的URL中輸入請求地址:http://www.weather.com.cn/data/sk/101010100.html
3. 點擊Send按鈕,這時就可以在下部的窗格中看到來自服務器的json回應資料,

3.postman基礎功能
3.1.常見型別的介面請求
常見的介面有如下四種型別,分別是:
含有查詢引數的介面,表單型別的介面,json型別的介面以及含有上傳檔案的介面,以下就對這四種型別介面及如何在postman中請求進行說明 ,
3.2.查詢引數的介面請求
什么是查詢引數?
所謂的查詢引數,其實就是URL地址中問號(?)后面的部分就叫查詢引數,比如:http://cx.shouji.360.cn/phonearea.php?number=13012345678 ,在這個介面中,查詢引數就是:number=13012345678 ,而這一部分是由有鍵值對組成,格式為:key1=value1&key2=value2, 如果有多組鍵值對,要用&隔開 ,
postman如何請求
在postman中實作對這類介面請求非常簡單,一般就需要明確倆個引數即可,一個是請求方法,一個請求地址,
針對上面的那個介面,地址已經給出 ,而它的請求方法是get ,那么在postman中只需要把這倆個引數填寫上即可請求 ,
具體實作步驟:
1. 打開postman,新建一個請求,
2. 在請求方法中選擇請求方法:GET,因為在postman中默認的請求方法就是GET,所以這一步可以忽略
3. 介面URL中輸入地址,點擊Send按鈕就可以發送請求了 ,

說明:查詢引數的URL一般直接拷貝到輸入的URL地址欄中就可以了,當然也可以把查詢引數在Params中輸入,倆者的效果是一樣的 ,
3.3.表單型別的介面請求
什么是表單 ?
我們都知道,在發送HTTP請求的時候,一個請求中一般包含三個部分,分別是請求行,請求頭,請求體 ,
不同的介面,請求體的資料型別是不一樣的,比較常見的一種就是表單型別,那么什么是表單型別呢 ?簡單理解就是在請求頭中查看Content-Type,它的值如果是:application/x-www-form-urlencoded .那么就說明客戶端提交的資料是以表單形式提交的 ,見下圖:

postman中如何請求?
如果在postman請求上圖的介面,我們只需要填寫四個引數,分別是(可以參考上圖):
- 請求方法:POST
- 請求URL:http://localhost/index.php?m=Home&c=User&a=do_login&t=0.21942974229794432
- 請求頭:Content-Type:application/x-www-form-urlencode
- 請求體:username=13088888888&password=123456&verify_code=8888
實作步驟:
- 打開postman,新建一個請求 ,
- 在請求中設定以上四個引數,點擊Send按鈕,在postman中設定請求體型別為,需要選擇body-> x-www-form-urlencoded
-
查看回應資料,

3.4.上傳檔案的表單請求
在做介面測驗時,我們經常會遇到需要上傳檔案的介面,比如微信的更新頭像,這就需要用到:multipart/form-data,它也屬于一種表單,但它既支持表單請求,也支持檔案上傳,它的請求報文中資料往往是下面這樣的,
POST http://localhost/index.php/home/Uploadify/imageUp/savepath/head_pic/pictitle/banner/dir/images.html HTTP/1.1
Content-Type: multipart/form-data
file=a1.jpg
這種型別的介面,在postman中該如何請求呢 ?我們先分析需要填寫的引數 ,
- 請求方法:POST
- 請求URL:http://localhost/index.php/home/Uploadify/imageUp/savepath/head_pic/pictitle/banner/dir/images.html
- 請求型別:multipart/form-data
- 請求體:file=a1.jpg
實作步驟:
- 打開postman,新建一個請求 ,
- 在請求中設定以上四個引數,點擊Send按鈕,注意:在postman中設定請求體型別,需要選擇body-> form-data ,file中要選擇File型別,然后上傳本地的檔案 ,
-
查看回應資料,

3.5.json型別的介面請求
這應該是介面測驗中最常見的一種情況了 , 也就是請求體型別為json,我們來看下這個請求報文 ,
POST http://xxx/api/sys/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
{"account":"root","password":"123456"}
根據以上報文,我們可以分析出,我們在postman只需要填寫四個引數即可,具體如下:
- 請求方法:POST
- 請求地址:http://xxx/api/sys/login
- 請求體型別:json
- 請求體資料:{"account":"root","password":"123456"}
實作步驟:
- 打開postman,新建一個請求 ,
- 在請求中設定以上四個引數,點擊Send按鈕,注意:在postman中設定請求體型別,需要選擇body-> raw -JSON
-
查看回應資料,

3.6.介面回應資料決議
回應資料是發送請求后經過服務器處理后回傳的結果,回應由三部分組成,分別是狀態行、回應頭、回應體,我們來看下postman的回應資料展示,

在postman中的回應資料展示:
- 狀態行:Status:200 OK
- 回應頭:Headers + Cookies,需要注意的是Cookies是包含在回應頭中的,但是為了明顯,工具會分開顯示
- 回應體:Body
那么這些資料對我們做介面測驗有什么作用呢 ?
- Body和Status是我們做介面測驗的重點,一般來說我們都會驗證回應體中的資料和回應狀態碼
- Test Results 是我們撰寫斷言后,可以查看斷言的執行結果 ,所以這個對我們也很有用 ,
- Time 和Size 是我們做性能測驗時,可以根據這兩個引數來對所測介面的性能做一個簡單的判斷,
接下來我們再來關注下Body中的幾個顯示主題,分別是:Pretty,Raw,Preview .

Pretty:翻譯成中文就是漂亮 , 也就是說回傳的Body資料在這個標簽中查看 ,都是經過格式化的,格式化后的資料看起來更加直觀,所以postman默認展示的也是這個選項,比如回傳html頁面,它會經過格式化成HTML格式后展示,比如回傳json,那么也會格式化成json格式展示 ,
Raw:翻譯成中文未經過加工的,也就是原始資料 ,原始資料一般都是本文格式的,未經過格式化處理的,一般在抓包工具中都有這個選項 ,
Preview:翻譯成中文就是預覽,這個選項一般對回傳HTML的頁面效果特別明顯,如請求百度后回傳結果,點擊這個選項后就直接能查看到的頁面 ,如下圖 ,同時這個選項和瀏覽器抓包中的Preview也是一樣的 ,

3.7.介面管理(Collection)
當我們對一個或多個系統中的很多用例進行維護時,首先想到的就是對用例進行分類管理,同時還希望對這批用例做回歸測驗 ,在postman也提供了這樣一個功能,就是Collection ,通過這個Collection就可以滿足我們的上面說的需求,
先對Collection功能的使用場景做個簡單總結 ,
- 用例分類管理,方便后期維護
-
可以進行批量用例回歸測驗 ,
那么Collection是如何去管理用例的呢 ?先想象我們要測驗一個系統,系統下有多個模塊,每個模塊下有很多的被測介面用例 ,那么基于這個場景,我們來通過Collection來進行實作:
1. 點擊Collection,點擊+New Collection,在彈出的輸入框中輸入Collection名稱(這個就可以理解為所測驗的系統);

2. 選中新建的Collection右鍵,點擊Add Folder ,在彈出對話框中輸入檔案夾名稱(這個就可以理解為系統中的模塊);

3. 選中新建的Folder,點擊Add Request ,在彈出的對話框中輸入請求名稱,這個就是我們所測驗的介面,也可以理解為測驗用例 ,

那么通過以上三個步驟,達到的效果就是如圖所示:

總結,通過上面的操作,我們實作了一個最簡單的demo模型,但實際上,有了這個功能才是postman學習的開始,因為很多功能都是基礎這個功能的基礎上進行的,比如用例的批量執行,Mock ,介面檔案等功能 ,
3.8.批量執行介面請求
當我們在一個Collection中撰寫了很多的介面測驗用例,想一起執行這批用例,在postman中是如何操作呢 ?
實作步驟:
1. 選中一個Collection,點擊右三角,在彈出的界面點擊RUN

2. 這是會彈出一個叫Collection Runner的界面,默認會把Collection中的所有用例選中 ,

3. 點擊界面下方的RUN Collection,就會對Collection中選中的所有測驗用例運行 ,

對上面的幾個紅框內的功能進行簡單說明:
- 斷言統計:左上角的兩個0是統計當前Collection中斷言成功的執行數和失敗的執行數,如果沒有撰寫斷言默認都為0 ,
- Run Summary: 運行結果總覽,點擊它可以看到每個請求中具體的測驗斷言詳細資訊 ,Export Result:匯出運行結果,默認匯出的結果json檔案 ,
- Retry: 重新運行,點擊它會把該Collection重新運行一遍
- New:回傳到Runner,可以重新選擇用例的組合 ,
總體來說,這個功能主要是用于對一個Collection中的所有用例或部分用例進行批量運行,已達到手工回歸測驗的目的,
3.9.日志除錯
在做介面測驗時,經常會因為代碼寫的有問題導致報錯,這時通過查看日志就顯得非常重要了,postman也提供了這樣的功能,它允許我們在腳本中撰寫列印陳述句,查看列印的結果 ; 同時也可以查看每個請求的日志資訊 ,
在postman中撰寫日志列印陳述句使用的是JavaScript,撰寫的位置可以是Pre-request Script 或Tests標簽中,撰寫列印陳述句如:console.log("我是一條日志")

那么列印的日如何看呢 ?在postman中有倆個入口,第一個入口就是:view-show postman console ,
第二個入口就是左下角第三個圖示 ,

打開的日志界面:

這里面有幾個比較實用的功能:
- 搜索日志:輸入URL或者列印的日志就能直接搜索出我們想要的請求和日志,這對我們在眾多日志中查找某一條日志是非常方便的 ,
- 按級別搜索:可以查詢log,info,warning,error級別的日志 ,有助于我們更快定位到錯誤 ,
- 查看原始報文(Show raw log):如果習慣看原始請求報文的話,這個功能可能更方便些 ,
- 隱藏請求(Hide network):把請求都隱藏掉,只查看輸出日志 ,
總之,通過這個功能,我們在請求介面報錯時,通過列印回應的日志,就能很輕松的找到問題原因了 ,
3.10.斷言
如果沒有斷言,我們只能做介面的功能測驗,但有了斷言后,就為我們做自動化提供了條件,并且在postman中的斷言是非常方便和強大的 ,
我們先來了解下postman斷言的一些特點 ,具體如下
- 斷言撰寫位置:Tests標簽
- 斷言所用語言:JavaScript
- 斷言執行順序:在回應體資料回傳后執行 ,
- 斷言執行結果查看:Test Results
在上面我們介紹到,撰寫的斷言代碼是JavaScript,那如果不會寫怎么辦 ?不用擔心,因為postman已經給我們內置了一些常用的斷言 ,用的時候,只需從右側點擊其中一個斷言,就會在文本框中自動生成對應斷言代碼塊 ,

接下來就讓我們了解一些常用斷言,還是按回應的組成來劃分,分別是狀態行,回應頭,回應體,
狀態行中又包括狀態碼,狀態訊息 ,在postman也可以對這兩個進行斷言
狀態行中的斷言:
-
斷言狀態碼:Status code: code is 200
pm.test("Status code is 200", function () { pm.response.to.have.status(200); //這里填寫的200是預期結果,實際結果是請求回傳結果 });
- 斷言狀態訊息:Status code:code name has string
pm.test("Status code name has string", function () { pm.response.to.have.status("OK"); //斷言回應狀態訊息包含OK });
斷言回應體(重點)
-
斷言回應體中包含XXX字串:Response body:Contains string
pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); }); //注解 pm.expect(pm.response.text()).to.include("string") 獲取回應文本中包含string
- 斷言回應體等于XXX字串:Response body : is equal to a string
pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); }); //注解 pm.response.to.have.body("response_body_string"); 獲取回應體等于response_body_string
- 斷言回應體(json)中某個鍵名對應的值:Response body : JSON value check
pm.test("Your test name", function () { var jsonData =https://www.cnblogs.com/yif0118/p/ pm.response.json(); pm.expect(jsonData.value).to.eql(100); }); //注解 var jsonData =https://www.cnblogs.com/yif0118/p/ pm.response.json() 獲取回應體,以json顯示,賦值給jsonData .注意:該回應體必須返會是的json,否則會報錯 pm.expect(jsonData.value).to.eql(100) 獲取jsonData中鍵名為value的值,然后和100進行比較
回應時間(一般用于性能測驗)
-
斷言回應時間:Response time is less than 200ms
pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); //斷言回應時間<200ms });
案例說明:
針對以下介面回傳的資料進行斷言:
{ "cityid": "101120101", "city": "濟南", "update_time": "2020-04-17 10:50", "wea": "晴", "wea_img": "qing", "tem": "16", "tem_day": "20", "tem_night": "9", "win": "東北風", "win_speed": "3級", "win_meter": "小于12km/h", "air": "113" }
- 斷言回應狀態碼為200
- 斷言city等于濟南
-
斷言update_time包含2020-04-17

總結,整體來說,如果用postman做介面測驗,這個斷言功能必不可少,其中我們常斷言的回應體包含和JSON這倆個斷言又是重重之重,
3.11.變數(全域/集合/環境)
變數可以使我們在請求或腳本中存盤和重復使用其值,通過將值保存在變數中,可以在集合,環境或請求中參考,
對我們做介面測驗來說,又是一個非常重要的功能 ,
在postman常用的三種變數分別是全域變數,環境變數,集合變數 ,
- 全域變數:一旦申明了全域變數,全域有效,也就是說postman中的任何集合,任何請求中都可以使用這個變數,它的作用域是最大的 ,
- 環境變數:要申明環境變數,首先的創建環境,然后在環境中才能創建變數 ,如果要想使用環境變數,必須先選擇(匯入)這個環境,這樣就可以使用這個環境下的變數了 ,需要說明的是環境也可以創建多個 ,每個環境下又可以有多個變數 ,
- 集合變數:集合變數是針對集合的,也就是說申明的變數必須基于某個集合,它的使用范圍也只是針對這個集合有效 ,
其中,他們的作用域范圍依次從大到小:全域變數>集合變數>環境變數 ,當在幾個不同的范圍內都申明了相同的變數時,則會優先使用范圍最小的變數使,
想要使用變數中的值只需倆個步驟,分別是定義變數和獲取變數 ,
- 定義變數(設定變數)
- 獲取變數(訪問變數)
定義變數
定義全域變數和環境變數,點擊右上角的小齒輪,彈出如下界面,就可以根據需求定義全域變數或者環境變數了,

已經定義的全域變數和環境變數,可以進行快速查看:

定義集合變數
選擇一個集合,打開查看更多動作(...)選單,然后點擊編輯 ,選擇“變數”選項卡以編輯或添加到集合變數,

定義變數除了以上方式,還有另外一種方式 ,但是這種方式在不同的位置定義,撰寫不一樣,
在URL,Params , Authorization , Headers , Body中定義:1. 手工方式創建一個空的變數名2. 在以上的位置把想要的值選中右擊,選中Set:環境|全域 ,選中一個變數名,點擊后就會保存到這個變數中

在Tests,Pre-requests Script:
- 定義全域變數:pm.collectionVariables.set("變數名",變數值)
- 定義環境變數:pm.environment.set("變數名",變數值)
- 定義集合變數:pm.variables.set("變數名",變數值)
獲取變數
定義好變數,接下來就可以使用變數了 ,需要注意的是,在不同的位置獲取變數,撰寫的規則也是不一樣的 ,
如果在請求引數中獲取變數,無論是獲取全域變數,還是環境變數,還是集合變數,獲取的方式都是一樣的撰寫規則:{{變數名}} ,
-
請求引數指的是:URL,Params , Authorization , Headers , Body
如果是在撰寫代碼的位置(Tests,Pre-requests Script)獲取變數,獲取不同型別的變數,撰寫的代碼都不相同,具體如下:
- 獲取環境變數:pm.environment.get(‘變數名’)
- 獲取全域變數:pm.globals.get('變數名')
-
獲取集合變數:pm.pm.collectionVariables.get.get('變數名')

變數的使用場景非常廣泛,比如我們后面要提到的介面關聯,請求前置腳本都會使用到變數 ,
3.12.請求前置腳本
前置腳本其實就是在Pre-requests Script中撰寫的JavaScript腳本,想要了解這個功能,需要先了解它的執行順序,那么下面就來看下它的執行順序 ,
可以看出,一個請求在發送之前,會先去執行Pre Request Script(前置腳本)中的代碼 ,那么這個功能在實際作業中有什么作用呢 ?
主要場景:一般情況下,在發送請求前需要對介面的資料做進一步處理,就都可以使用這個功能,比如說,登錄介面的密碼,在發送前需要做加密處理,那么就可以在前置腳本中做加密處理,再比如說,有的介面的輸入引數有一些亂數,每請求一次介面引數值都會發送變化,就可以在前置腳本中撰寫生成亂數的代碼 ,
總體來說,就是在請求介面之前對我們的請求資料進行進一步加工處理的都可以使用前置腳本這個功能,
接下來通過一個案例來看下該功能是如何使用 ?
案例:
- 請求的登錄介面URL,引數t的值要求的規則是每次請求都必須是一個亂數,
- 介面地址:http://localhost/index.php?m=Home&c=User&a=do_login&t=0.7102045930338428

實作步驟:
- 在前置腳本中撰寫生成亂數
- 將這個值保存成環境變數
-
將引數t的值替換成環境變數的值 ,

總之,這個前置腳本對我們做介面測驗也非常有用,對一些復雜的場景,都可以使用前置腳本進行處理后再請求介面 ,
3.13.介面關聯
在我們測驗的介面中,經常出現這種情況 ,上一個介面的回傳資料是下一個介面的輸入引數 ,那么這倆個介面就產生了關聯,這種關聯在做介面測驗時非常常見,那么在postman中,如何實作這種關聯關系呢 ?
實作思路:
- 提取上一個介面的回傳資料值,
- 將這個資料值保存到環境變數或全域變數中
- 在下一個介面獲取環境變數或全域變數
案例:
- 用戶上傳頭像功能,需要用戶先上傳一張圖片,然后會自動預覽 ,那么在這個程序中,會呼叫到倆個介面 ,第一個上傳頭像介面,第二個預覽影像介面 ,
-
其中呼叫上傳頭像介面成功后會回傳如下資訊:
{ "url": "/public/upload/user//head_pic//ba51d1c2f7f7b98dfb5cad90846e2d79.jpg", "title": "banner", "original": "", "state": "SUCCESS", "path": "images" }
而影像預覽介面URL為:
http://localhost/public/upload/user//head_pic//ba51d1c2f7f7b98dfb5cad90846e2d79.jpg ,可以看出這個介面的URL后半部分其實是上一個介面回傳的url的值 ,那么這倆個介面就產生了關聯,那么在postman 可以通過以下三步完成這倆個介面的關聯實作 ,
實作步驟:
- 獲取上傳頭像介面回傳url的值
- 將這個值保存成全域變數(環境變數也可以)
-
在影像預覽中使用全域變數

可以看出,介面的關聯的解決方案都是用的是變數中的知識,也就是說只要你明確了要提取的值,后面就是保存該值,然后在其他介面使用該值就可以了,
3.14.常見回傳值獲取
在做介面測驗時,請求介面回傳的資料都是很復雜的json資料,有著多層嵌套,這樣的資料層級在postman怎么獲取呢 ?
案例1:多層json嵌套, 獲取user_id的值
{ "code": 0, "message": "請求成功!", "data": { "user_id": "1252163151781167104" } }
//獲取json體資料 var jsonData =https://www.cnblogs.com/yif0118/p/ pm.response.json() // 獲取user_id的值,通過.獲取 var user_id = jsonData.data.user_id
案例2:json中存在串列,獲取points中的第二個元素
{ "code": 0, "message": "請求成功!", "data": { "roles": { "api": [ "API-USER-DELETE" ], "points": [ "point-user-delete", "POINT-USER-UPDATE", "POINT-USER-ADD" ] }, "authCache": null } }
//獲取json體資料 var jsonData =https://www.cnblogs.com/yif0118/p/ pm.response.json() // 獲取user_id的值,通過下標獲取串列中某個元素 var user_id = jsonData.data.roles.points[1]
案例3:串列中取最后一個元素
{ "code": 0, "message": "請求成功!", "data": { "total": 24, "rows": [ { "id": "1066370498633486336", "mobile": "15812340003", "username": "zbz" }, { "id": "1071632760222810112", "mobile": "16612094236", "username": "llx" }, ... { "id": "1075383133106425856", "mobile": "13523679872", "username": "test001", },
//獲取json體資料 var jsonData =https://www.cnblogs.com/yif0118/p/ pm.response.json() // 獲取id的值,通過slice(-1)獲取串列中最后一個元素, var id = jsonData.data.rows.slice(-1)[0]
閱讀博客原文請移步至:
https://mp.weixin.qq.com/s/twufEyn7P-GpdKIVCXXxPw 《碼匠筆記——一文全面決議 Postman 工具》
https://www.toutiao.com/i6913538714060800515/ 《一文帶你全面決議postman工具的使用(基礎篇)》
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/270690.html
標籤:其他
下一篇:【小白學演算法】7.樹與二叉樹
