1. 程式人生 > 其它 >全網最全的 postman 工具使用教程

全網最全的 postman 工具使用教程

全網最全的 postman 工具使用教程
https://mp.weixin.qq.com/s/l-uJeeOY2kf4c03uPaC1cg

postman是一款支援http協議的介面除錯與測試工具,其主要特點就是功能強大,使用簡單且易用性好 。

無論是開發人員進行介面除錯,還是測試人員做介面測試,postman都是我們的首選工具之一 。

那麼接下來就介紹下postman到底有哪些功能,它們分別都能幹些什麼 。下面先通過一張圖來直觀的來看下postman中所包含的功能 。

圖片

當然,以上功能也只是展示了postman的一部分功能,為了能更加全面的體現這款工具的特點,我將從以下三個維度來加以說明。它們分別是:

  • 基礎功能
    • 常見型別的介面請求
    • 介面響應資料的解析
    • 介面管理(Collection)
    • 批量執行介面請求
    • 日誌除錯
    • 斷言
    • 變數
    • 請求前置指令碼
    • 介面關聯
    • 常見的返回值獲取
  • 便捷功能快
    • 速填寫查詢引數
    • 快速填寫請求頭資訊
    • 快速實現新增一個請求
    • 如何繼承集合認證
    • 批量斷言
    • 快速查詢和替換
  • 高階功能
    • 讀取檔案進行引數化
    • 生成測試報告
    • 程式碼中傳送請求
    • 編寫介面文件
    • mock服務
    • 監控
    • 使用工作空間
    • 程式碼同步與分支管理
    • 連線資料庫
    • apis

一. postman安裝說明

postman 在 2018 年之後就不再支援瀏覽器版本,所以,想要使用它就必須先下載客戶端再安裝使用,下面就以 Windows 系統為例進行安裝 。

1. 下載與安裝

postman安裝步驟:

1. 訪問postman官方網站,下載最新版本

訪問地址:https://www.getpostman.com/

2. 進入到下載頁面,根據自己電腦下載對應的版本

圖片

3. 雙擊下載的安裝包,進入到安裝介面,直到使用者登入和註冊介面。

若個人使用,選擇跳過即可,這時會進入到postman主介面,至此postman安裝成功(下圖)。

若團隊使用,可以進行註冊,註冊後使用賬號可以加入團隊工作區

圖片

2.介面導航說明

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

圖片

3.傳送第一個請求

如果你是第一次使用postman傳送請求,下面這個例子可以作為一個最基本的入門,可以幫我們建立一個初始印象 。

1. 開啟postman,點選+加號開啟一個新的請求頁。

2. 在請求的URL中輸入請求地址:

http://www.weather.com.cn/data/sk/101010100.html

3. 點選Send按鈕,這時就可以在下部的窗格中看到來自伺服器的json響應資料。

圖片

二.postman基礎功能

1.常見型別的介面請求

常見的介面有如下四種類型,分別是含有查詢引數的介面,表單型別的介面,json型別的介面以及含有上傳檔案的介面,以下就對這四種類型介面及如何在postman中請求進行說明 。

1.1 .查詢引數的介面請求

什麼是查詢引數?

所謂的查詢引數,其實就是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中輸入,倆者的效果是一樣的 。

1.2 表單型別的介面請求

什麼是表單 ?

我們都知道,在傳送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

實現步驟:

  1. 開啟postman,新建一個請求 。
  2. 在請求中設定以上四個引數,點選Send按鈕。在postman中設定請求體型別為,需要選擇body-> x-www-form-urlencoded
  3. 檢視響應資料。
圖片
1.3 上傳檔案的表單請求

在做介面測試時,我們經常會遇到需要上傳檔案的介面,比如微信的更新頭像。這就需要用到: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

實現步驟:

  1. 開啟postman,新建一個請求 。
  2. 在請求中設定以上四個引數,點選Send按鈕。注意:在postman中設定請求體型別,需要選擇body-> form-data 。file中要選擇File型別,然後上傳本地的檔案 。
  3. 檢視響應資料。
圖片
1.4 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"}

實現步驟:

  1. 開啟postman,新建一個請求 。
  2. 在請求中設定以上四個引數,點選Send按鈕。注意:在postman中設定請求體型別,需要選擇body-> raw -JSON
  3. 檢視響應資料。
圖片

2.介面響應資料解析

響應資料是傳送請求後經過伺服器處理後返回的結果,響應由三部分組成,分別是狀態行、響應頭、響應體。我們來看下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. 介面管理(Collection)

當我們對一個或多個系統中的很多用例進行維護時,首先想到的就是對用例進行分類管理,同時還希望對這批用例做迴歸測試 。在postman也提供了這樣一個功能,就是Collection 。通過這個Collection就可以滿足我們的上面說的需求。

先對Collection功能的使用場景做個簡單總結 。

  • 用例分類管理,方便後期維護
  • 可以進行批量用例迴歸測試 。

那麼Collection是如何去管理用例的呢 ?先想象我們要測試一個系統,系統下有多個模組,每個模組下有很多的被測介面用例 。那麼基於這個場景,我們來通過Collection來進行實現:

1. 點選Collection,點選+New Collection,在彈出的輸入框中輸入Collection名稱(這個就可以理解為所測試的系統)

圖片

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

圖片

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

圖片

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

圖片

總結,通過上面的操作,我們實現了一個最簡單的demo模型。但實際上,有了這個功能才是postman學習的開始,因為很多功能都是基礎這個功能的基礎上進行的,比如用例的批量執行,Mock ,介面文件等功能 。

4. 批量執行介面請求

當我們在一個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中的所有用例或部分用例進行批量執行,已達到手工迴歸測試的目的。

5.日誌除錯

在做介面測試時,經常會因為程式碼寫的有問題導致報錯,這時通過檢視日誌就顯得非常重要了,postman也提供了這樣的功能,它允許我們在指令碼中編寫列印語句,檢視列印的結果 ; 同時也可以檢視每個請求的日誌資訊 。

在postman中編寫日誌列印語句使用的是JavaScript,編寫的位置可以是Pre-request Script 或Tests標籤中。編寫列印語句如:console.log("我是一條日誌")

圖片

那麼列印的日如何看呢 ?在postman中有倆個入口,第一個入口就是:view-show postman console 。

第二個入口就是左下角第三個圖示 。

圖片

開啟的日誌介面:

圖片

這裡面有幾個比較實用的功能:

  • 搜尋日誌:輸入URL或者列印的日誌就能直接搜尋出我們想要的請求和日誌,這對我們在眾多日誌中查詢某一條日誌是非常方便的 。
  • 按級別搜尋:可以查詢log,info,warning,error級別的日誌 ,有助於我們更快定位到錯誤 。
  • 檢視原始報文(Show raw log):如果習慣看原始請求報文的話,這個功能可能更方便些 。
  • 隱藏請求(Hide network):把請求都隱藏掉,只檢視輸出日誌 。

總之,通過這個功能,我們在請求介面報錯時,通過列印響應的日誌,就能很輕鬆的找到問題原因了 。

6.斷言

如果沒有斷言,我們只能做介面的功能測試,但有了斷言後,就為我們做自動化提供了條件,並且在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  
});

響應頭中的斷言

  • 斷言響應頭中包含:Response headers:Content-Type header check
pm.test("Content-Type is present", function () {  
    pm.response.to.have.header("Content-Type"); //斷言響應頭存在"Content-Type"  
});

斷言響應體(重點)

  • 斷言響應體中包含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 = pm.response.json();  
    pm.expect(jsonData.value).to.eql(100);  
});  
//註解  
var jsonData = 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這倆個斷言又是重重之重。

7. 變數(全域性/集合/環境)

變數可以使我們在請求或指令碼中儲存和重複使用其值,通過將值儲存在變數中,可以在集合,環境或請求中引用。

對我們做介面測試來說,又是一個非常重要的功能 。

在postman常用的三種變數分別是全域性變數,環境變數,集合變數 。

  • 全域性變數:一旦申明瞭全域性變數,全域性有效,也就是說postman中的任何集合,任何請求中都可以使用這個變數。它的作用域是最大的 。
  • 環境變數:要申明環境變數,首先的建立環境,然後在環境中才能建立變數 。如果要想使用環境變數,必須先選擇(匯入)這個環境,這樣就可以使用這個環境下的變量了 。需要說明的是環境也可以建立多個 。每個環境下又可以有多個變數 。
  • 集合變數:集合變數是針對集合的,也就是說申明的變數必須基於某個集合,它的使用範圍也只是針對這個集合有效 。

其中,他們的作用域範圍依次從大到小:全域性變數>集合變數>環境變數 。當在幾個不同的範圍內都申明瞭相同的變數時,則會優先使用範圍最小的變數使。

想要使用變數中的值只需倆個步驟,分別是定義變數和獲取變數 。

  1. 定義變數(設定變數)
  2. 獲取變數(訪問變數)

定義變數

定義全域性變數和環境變數,點選右上角的小齒輪,彈出如下介面,就可以根據需求定義全域性變數或者環境變量了。

圖片

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

圖片

定義集合變數

選擇一個集合,開啟檢視更多動作(...)選單,然後點選編輯 。選擇“變數”選項卡以編輯或新增到集合變數。

圖片

定義變數除了以上方式,還有另外一種方式 。但是這種方式在不同的位置定義,編寫不一樣。

在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('變數名')
圖片

變數的使用場景非常廣泛,比如我們後面要提到的介面關聯,請求前置指令碼都會使用到變數 。

8. 請求前置指令碼

前置指令碼其實就是在Pre-requests Script中編寫的JavaScript指令碼,想要了解這個功能,需要先了解它的執行順序。那麼下面就來看下它的執行順序 。

可以看出,一個請求在傳送之前,會先去執行Pre Request Script(前置指令碼)中的程式碼 。那麼這個功能在實際工作中有什麼作用呢 ?

主要場景:一般情況下,在傳送請求前需要對介面的資料做進一步處理,就都可以使用這個功能,比如說,登入介面的密碼,在傳送前需要做加密處理,那麼就可以在前置指令碼中做加密處理,再比如說,有的介面的輸入引數有一些隨機數,每請求一次介面引數值都會發送變化,就可以在前置指令碼中編寫生成隨機數的程式碼 。

總體來說,就是在請求介面之前對我們的請求資料進行進一步加工處理的都可以使用前置指令碼這個功能。

接下來通過一個案例來看下該功能是如何使用 ?

案例:

  • 請求的登入介面URL,引數t的值要求的規則是每次請求都必須是一個隨機數。
  • 介面地址:http://localhost/index.php?m=Home&c=User&a=do_login&t=0.7102045930338428
圖片

實現步驟:

  1. 在前置指令碼中編寫生成隨機數
  2. 將這個值儲存成環境變數
  3. 將引數t的值替換成環境變數的值 。
圖片

總之,這個前置指令碼對我們做介面測試也非常有用,對一些複雜的場景,都可以使用前置指令碼進行處理後再請求介面 。

9. 介面關聯

在我們測試的介面中,經常出現這種情況 。上一個介面的返回資料是下一個介面的輸入引數 ,那麼這倆個介面就產生了關聯。這種關聯在做介面測試時非常常見,那麼在postman中,如何實現這種關聯關係呢 ?

實現思路:

  1. 提取上一個介面的返回資料值,
  2. 將這個資料值儲存到環境變數或全域性變數中
  3. 在下一個介面獲取環境變數或全域性變數

案例:

  • 使用者上傳頭像功能,需要使用者先上傳一張圖片,然後會自動預覽 。那麼在這個過程中,會呼叫到倆個介面 ,第一個上傳頭像介面,第二個預覽影象介面 。
  • 其中呼叫上傳頭像介面成功後會返回如下資訊:
{  
    "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 可以通過以下三步完成這倆個介面的關聯實現 。

實現步驟:

  1. 獲取上傳頭像介面返回url的值
  2. 將這個值儲存成全域性變數(環境變數也可以)
  3. 在影象預覽中使用全域性變數
圖片

可以看出,介面的關聯的解決方案都是用的是變數中的知識,也就是說只要你明確了要提取的值,後面就是儲存該值,然後在其他介面使用該值就可以了。

10.常見返回值獲取

在做介面測試時,請求介面返回的資料都是很複雜的json資料,有著多層巢狀,這樣的資料層級在postman怎麼獲取呢 ?

案例1:多層json巢狀, 獲取user_id的值

{  
    "code": 0,  
    "message""請求成功!",  
    "data": {  
        "user_id""1252163151781167104"  
    }  
}
//獲取json體資料  
var jsonData = 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 = 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 = pm.response.json()  
// 獲取id的值,通過slice(-1)獲取列表中最後一個元素。  
var id = jsonData.data.rows.slice(-1)[0]
(感謝閱讀,希望對你所有幫助)
來源:www.toutiao.com/i6913538714060800515
https://mp.weixin.qq.com/s/l-uJeeOY2kf4c03uPaC1cg