Postman 從入門到進階教程!

postman 是一款支持 http 協議的接口調試與測試工具,其主要特點就是功能強大,使用簡單且易用性好 。

無論是開發人員進行接口調試,還是測試人員做接口測試,postman 都是我們的首選工具之一 。

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

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

「一. 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 請求上圖的接口,我們只需要填寫四個參數,分別是 (可以參考上圖):

實現步驟:

  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 中該如何請求呢 ?我們先分析需要填寫的參數 。

實現步驟:

  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 只需要填寫四個參數即可,具體如下:

實現步驟:

  1. 打開 postman,新建一個請求 。

  2. 在請求中設置以上四個參數,點擊 Send 按鈕。注意:在 postman 中設置請求體類型,需要**「選擇 body-> raw -JSON」**

  3. 查看響應數據。

「2. 接口響應數據解析」

響應數據是發送請求後經過服務器處理後返回的結果,響應由三部分組成,分別是狀態行、響應頭、響應體。我們來看下 postman 的響應數據展示。

在 postman 中的響應數據展示:

那麼這些數據對我們做接口測試有什麼作用呢 ?

接下來我們再來關注下 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 中選中的所有測試用例運行 。

對上面的幾個紅框內的功能進行簡單說明:

總體來說,這個功能主要是用於對一個 Collection 中的所有用例或部分用例進行批量運行,已達到手工迴歸測試的目的。

「5. 日誌調試」

在做接口測試時,經常會因爲代碼寫的有問題導致報錯,這時通過查看日誌就顯得非常重要了,postman 也提供了這樣的功能,它允許我們在腳本中編寫打印語句,查看打印的結果 ; 同時也可以查看每個請求的日誌信息 。

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

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

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

打開的日誌界面:

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

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

「6. 斷言」

如果沒有斷言,我們只能做接口的功能測試,但有了斷言後,就爲我們做自動化提供了條件,並且在 postman 中的斷言是非常方便和強大的 。

我們先來了解下 postman 斷言的一些特點 ,具體如下

在上面我們介紹到,編寫的斷言代碼是 JavaScript,那如果不會寫怎麼辦 ?不用擔心,因爲 postman 已經給我們內置了一些常用的斷言 。用的時候,只需從右側點擊其中一個斷言,就會在文本框中自動生成對應斷言代碼塊 。

接下來就讓我們瞭解一些常用斷言,還是按響應的組成來劃分,分別是狀態行,響應頭,響應體。

狀態行中又包括狀態碼,狀態消息 。在 postman 也可以對這兩個進行斷言

「狀態行中的斷言」

pm.test("Status code is 200"function () {
    pm.response.to.have.status(200); //這裏填寫的200是預期結果,實際結果是請求返回結果
});
pm.test("Status code name has string"function () {
    pm.response.to.have.status("OK"); //斷言響應狀態消息包含OK
});

「響應頭中的斷言」

pm.test("Content-Type is present"function () {
    pm.response.to.have.header("Content-Type"); //斷言響應頭存在"Content-Type"
});

「斷言響應體 (重點)」

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
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
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進行比較

「響應時間 (一般用於性能測試)」

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"
}

總結,整體來說,如果用 postman 做接口測試,這個斷言功能必不可少,其中我們常斷言的響應體包含和 JSON 這倆個斷言又是重重之重。

「7. 變量(全局 / 集合 / 環境)」

變量可以使我們在請求或腳本中存儲和重複使用其值,通過將值保存在變量中,可以在集合,環境或請求中引用。

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

在 postman 常用的三種變量分別是全局變量,環境變量,集合變量 。

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

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

  1. 定義變量(設置變量)

  2. 獲取變量(訪問變量)

「定義變量」

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

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

「定義集合變量」

選擇一個集合,打開查看更多動作 (「...」)菜單,然後點擊編輯 。選擇 “變量” 選項卡以編輯或添加到集合變量。

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

在 URL,Params , Authorization , Headers , Body 中定義:

\1. 手工方式創建一個空的變量名

\2. 在以上的位置把想要的值選中右擊,選中 Set:環境 | 全局 ,選中一個變量名,點擊後就會保存到這個變量中

在 Tests,Pre-requests Script:

「獲取變量」

定義好變量,接下來就可以使用變量了 。需要注意的是,在不同的位置獲取變量,編寫的規則也是不一樣的 。

如果在**「請求參數中」**獲取變量,無論是獲取全局變量,還是環境變量,還是集合變量,獲取的方式都是一樣的編寫規則:{{變量名}} 。

如果是在編寫代碼的位置 (Tests,Pre-requests Script) 獲取變量,獲取不同類型的變量,編寫的代碼都不相同,具體如下:

變量的使用場景非常廣泛,比如我們後面要提到的接口關聯,請求前置腳本都會使用到變量 。

「8. 請求前置腳本」

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

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

主要場景:一般情況下,在發送請求前需要對接口的數據做進一步處理,就都可以使用這個功能,比如說,登錄接口的密碼,在發送前需要做加密處理,那麼就可以在前置腳本中做加密處理,再比如說,有的接口的輸入參數有一些隨機數,每請求一次接口參數值都會發送變化,就可以在前置腳本中編寫生成隨機數的代碼 。

總體來說,就是在請求接口之前對我們的請求數據進行進一步加工處理的都可以使用前置腳本這個功能。

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

案例:

實現步驟:

  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]

傑哥的 IT 之旅

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/6AXZ9Oqn6S1Wo48Bh-_jCg