Postman快速入門

Surpassme 發表於 2021-10-10

    Postman是一款非常流行的支援HTTP/HTTPS協議的介面除錯與測試工具,其功能非常強大,易用。

1 基礎知識

1.1 下載與安裝

    Postman的安裝步驟,本例以Windows為例,如下所示:

  • 1、訪問官網,下載Postman,官網地址如下所示:

https://www.postman.com/

  • 2、進入到主頁面後,下載適合自己的作業系統的版本,如下所示:

0101下載Postman.png

直接下載Postman的地址:https://www.postman.com/downloads/

  • 3、雙擊下載之後的安裝包,進入安裝介面,按安裝嚮導完成即可。

  • 4、點選桌面快捷方式,註冊、登入或者直接使用即可,跳過登入直接使用如下所示:

0102跳過登入直接使用.png

這裡推薦註冊,在註冊並登入後,Postman會將相應的資料上傳至遠端伺服器,後面在其他地方登入後,可以自動同步之前的資料。

1.2 介面導航說明

    初次使用Postman可能對介面上一些選單、導航不太熟悉,可檢視下圖的說明。

0201Postman主頁面介面介紹.png

1.3 第一個示例

    Postman傳送請求非常簡章,我們以最簡單的GET請求為例,操作步驟如下所示:

  • 1.開啟Postman,點選左邊Collections,再點選右邊的+,新建一個Collections;

0202新建Collection.png

  • 2.在上一步新建的Collection上右鍵選擇Rename輸入新名字,按Enter鍵即可。

0203重新命名Collections.png

  • 3、在Postman填寫好相應的內容,點選Send即可:

請求方法:選擇GET
請求地址中輸入:http://httpbin.org/get
Params中輸入引數zq和lyl

    以下輸入如下圖所示:

0204第一個請求.png

2 基礎功能

2.1 常見HTTP介面型別

    在HTTP中常見的介面主要有以下幾種型別

  • 帶查詢引數的介面
  • 表單型別的介面

2.1.1 帶查詢引數的介面

    帶查詢引數的介面通常為GET方法,在URL地址中通過?進行分隔,多個引數使用&進行連線,常見表現形式為param=value。示例如下所示:

http://httpbin.org/get?zq=diana&lyl=surpass

    以上為GET方法請求的完整URL地址,可拆分為如下所示:

2.1.2 表單型別的介面

    表單型別的介面通常為POST方法,常見的提交資料方式有以下幾種方式:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • application/json
  • text/xml
2.1.2.1 application/x-www-form-urlencoded

    這是最常見的POST提交資料的方式。在POST提交資料中Content-Type被指定為application/x-www-form-urlencoded,提交的資料按照 key1=value1&key2=value2 的方式進行編碼,其中key和value都會進行URL轉碼

2.1.2.2 multipart/form-data

    這是另外一個常見的POST提交資料的方式。一般這種方式用於上傳檔案

2.1.2.3 application/json

    application/json這是目前用得最多的資料提交方式,做為請求時,用來告訴伺服器資料是序列化化的JSON資料。

2.1.2.4 text/xml

    text/xml是一種使用HTTP作為傳輸協議,XML作為編碼方式的遠端呼叫規範,它的使用也很廣泛,能很好的支援已有的 XML-RPC 服務。不過,XML 結構還是過於臃腫,一般場景用 JSON 會更靈活方便

2.1.3 Postman實現示例

2.1.3.1 帶查詢引數的介面

    可參考前面的第一個示例,結果如下所示:

0205PostURLencode.png

2.1.3.2 application/x-www-form-urlencoded

    操作步驟如下所示:

  • 1.新建一個請求
  • 2.請求方法為POST
  • 3.輸入請求地址:
http://httpbin.org/post
  • 4.切換至Body,編碼型別選擇x-www-form-urlencoded
  • 5.填寫相應的引數
username:diana
password:surpass
code:loveyou
  • 6.點選Send

0205PostURLencode.png

2.1.3.3 multipart/form-data

    multipart/form-data一般常用於上傳檔案,比如更新使用者頭像、License授權等,操作步驟如下所示:

  • 1.新建一個請求
  • 2.請求方法為POST
  • 3.輸入請求地址:
http://httpbin.org/post
  • 4.切換至Body,編碼型別選擇form-data
  • 5.在key中填入引數file,移動滑鼠至其他地方
  • 6、再次移動滑鼠至引數file後面,設定引數型別為File

0206設定引數型別為File.png

  • 7.在value點選Select Files

0207選擇檔案.png

  • 8.點選Send

0208PostMutiFormData.png

上傳檔案中的key(該示例為file)需要根據實際介面地址進行替換,該例僅為演示

2.1.3.4 application/json

    這是介面最常見一種的資料型別,操作步驟如下所示:

  • 1.新建一個請求
  • 2.請求方法為POST
  • 3.輸入請求地址:
http://httpbin.org/post
  • 4.切換至Headers,輸入Conten-Type

0209設定Contet-Type為Json.png

  • 5.切換至Body,編碼型別選擇raw,輸入以下資料
{
    "username": "diana",
    "password": "surpass",
    "code": "loveyou"
}
  • 6.點選Send

0210JSON請求響應.png

2.1.3.5 text/xml
  • 1.新建一個請求
  • 2.請求方法為POST
  • 3.輸入請求地址:
http://httpbin.org/post
  • 4.切換至Headers,輸入Conten-Type

0211設定Contet-Type為xml.png

  • 5.切換至Body,編碼型別選擇raw,輸入以下資料
<?xml version="1.0" encoding="UTF-8" ?>
<userinfo>
    <username>diana</username>
    <password>surpass</password>
    <code>loveyo</code>
</userinfo>
  • 6.點選Send

0212XML請求響應.png

2.2 介面響應資料解析

    響應資料是在傳送請求後經過伺服器處理後返回的結果,通過由三部分組成,分別是狀態行、響應頭、響應體。在Postman的展示如下所示:

0213Postman響應資料解析.png

    在Postman中的響應資料中,對介面測試的主要參考如下所示:

  • Body和Status是重點,可以用來驗證響應資料和響應狀態碼
  • Test Result用來我們編寫的斷言執行結果
  • Time和Size可用作效能測試的簡單判斷條件

    Body的顯示主題,常用的是Pretty、Raw、Preview

  • Pretty:直譯是美化,如果選中該標籤,則意味著返回的資料Postman會自動進行格式化處理,使資料看起來更加美觀。若返回的資料是json格式,則格式化為json再進行展示
  • Raw:即返回的資料,不做任何美化處理,直接顯示最原始的資料。
  • Priview:直譯為預覽,一般常用於返回為HTML的響應中,可以直接顯示為網頁形式,示例如下所示:

0214ResponsePreview.png

2.3 介面管理

2.3.1 介面管理功能

    當我們對一個或多個系統中的介面用例進行維護時,需要進行分類管理,方便後期維護或批量做迴歸測試。在Postman提供該功能為Collections,通過Collections可以實現以下功能:

  • 用例分類管理
  • 批量回歸測試用例

    假設一個系統按模組劃分有以下幾個模組和介面,如下所示:

--使用者模組
  |--使用者新增介面
  |--使用者刪除介面
  |--使用者修改密碼介面
  |--使用者查詢介面
--訂單模組
  |--訂單管理
    |--訂單查詢介面
    |--訂單刪除介面
  |--訂單跟蹤
    |--訂單物流資訊查詢

    我們按以上結構進行建立Collections,操作步驟如下所示:

  • 1.點選左邊Collection選項卡,再點選+,如下所示:

0215建立Collections.png

  • 2.在建立的Collections右鍵,在彈出的選單中選擇Rename,輸入新的名稱CollectionSample即可

0216RenameCollection.png

  • 3.建立子模組,在CollectionSample右鍵,在彈出的選單中選擇Add Folder,再次在剛新建立的子模組中右鍵,在彈出的選單中選擇Rename,輸入新的名稱使用者模組即可,如下所示:

0217CreateAndRnameSubFolder.png

  • 4.建立請求,在子模組使用者模組右鍵,在彈出的選單中選擇Add Request,再次在剛新建立的請求右鍵,在彈出的選單中選擇Rename,輸入新的名稱使用者模組即可,如下所示:

0218CreateAndRenameRequest.png

  • 5.重複上面步驟,依次建立各模組和相應的介面請求,最終效果如下所示:

0219Collections示例.png

2.3.2 批量執行介面

    有一些時間,想單獨執行系統中某一模組的全部介面用例,該如何操作呢?Postman提供了批量執行介面用例的功能,對應於Run,操作步驟如下所示:

  • 1.選中一個需要批量執行的Collections,在選單中選擇Run,如下所示:

0220MutiExecAPITestCase.png

  • 2.在彈出的視窗中勾選需要執行的介面用例,並設定對應的引數,點選Run CollectionSample即可

Iterations:代表需要執行的次數
Delay:在執行完一個介面後的休眠時間
Data:從檔案中讀取並替換引數化變數

0221RunCollections.png

  • 3.在等待執行完成,可以檢視相應的結果
    All Tests:所有執行的測試介面用例
    Passed:斷言通過的介面用例
    Failed:斷言失敗的介面用例

0222RunResults.png

2.3.3 日誌除錯

    在介面測試時,會因為程式碼有問題導致報錯,這時則可以利用Postman的日誌除錯功能實現快速定位問題。
    在Postman中編寫日誌列印的語句是使用JavaScript,可以在Pre-request Script和Tests中編寫。
    在Postman中預設Console是隱藏的可以通過以下兩種方式開啟

  • 選單欄View->Show Postman Console
  • 點選左下角的Console

0223ConsoleFunction.png

搜尋日誌:輸入URL或日誌關鍵字即可搜尋出對應的請求和日誌記錄
日誌級別:可以按日誌級別進行快速查詢,日誌級別有:All logs、Log、Info、Warning、Error
檢視原始日誌:提供格式化後的請求日誌和原生日誌,可以進行切換
Show timestamps:是否顯示時間戳
Hides network:隱藏介面請求,僅顯示日誌

2.3.4 斷言

    如果沒有斷言,就需要人工去判斷返回的結果是否正確,而有了斷言之後,就為介面自動化提供一個基礎條件,相應Postman也提供對應的斷言功能,在Postman中的斷言有以下幾個特點:

  • 斷言編寫位置:Tests選項卡
  • 斷言編寫語言:JavaScript
  • 斷言執行順序:在響應資料返回後執行
  • 斷言結果檢視:Test Results

JavaScript如果不會怎麼辦?Postman非常貼心的提供了一些常用的內建斷言,從右側點選對應的斷言,就可以在左邊Tests標籤中生成斷言程式碼片斷。

0224內建斷言.png

    常用斷言程式碼,按響應又可以分為狀態碼、響應頭、響應體

  • 斷言狀態碼:Status code: code is 200
pm.test("Status code is 200", function () {
    // 響應的狀態碼為200
    pm.response.to.have.status(200);
});
  • 斷言狀態訊息:Status code:code name has string
pm.test("Status code name has string", function () {
    // 響應的狀態訊息包含的字元OK
    pm.response.to.have.status("OK");
});
  • 成功的POST請求狀態碼:Successful POST request
pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]);
});
  • 斷言響應頭中包含:Response headers:Content-Type header check
pm.test("Content-Type is present", function () {
   //斷言響應頭存在Content-Type
    pm.response.to.have.header("Content-Type");
});
  • 斷言響應體中包含字串:Response body:Contains string
pm.test("Body matches string", function () {
    // 響應資料中包含字串loveyou
    pm.expect(pm.response.text()).to.include("loveyou");
});
  • 斷言響應體等於字串:Response body : is equal to a string
pm.test("Body is correct", function () {
    // 響應資料等於字串loveyou
    pm.response.to.have.body("loveyou");
});
  • 斷言響應體(json)中某個鍵名對應的值:Response body : JSON value check

    響應的資料如下所示:

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "code": "loveyou",
        "password": "surpass",
        "username": "diana"
    },
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": "no-cache",
        "Content-Length": "392",
        "Content-Type": "multipart/form-data; boundary=--------------------------885313293587233892669712",
        "Host": "httpbin.org",
        "Postman-Token": "9d61a0e9-d938-4263-90fb-b2acb696e700",
        "User-Agent": "PostmanRuntime/7.28.4",
        "X-Amzn-Trace-Id": "Root=1-6159c71c-65ecce4342403def289304d9"
    },
    "json": null,
    "origin": "183.192.232.183",
    "url": "http://httpbin.org/post"
}

    斷言程式碼如下所示:

pm.test("Your test name", function () {
    // 獲取響應Json資料
    var jsonData = pm.response.json();
    // 獲取jsonData鍵名為form的子鍵名為username的值為diana,然後再與期望的值進行對比
    pm.expect(jsonData.form.username).to.eql("diana");
});
  • 響應時間:Response time is less than 1000ms
pm.test("Response time is less than 1000ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(1000);
});

一般用於簡單的效能測試參考指標

2.3.5 變數

    變數可以指令碼中儲存和重複使用,通過設定變數,可以在集合、環境或請求中引用。在Postman中常用的變數有以下全域性變數、環境變數、集合變數。

  • 全域性變數:一旦申明,則全域性有效,即在Postman中的任何集合中都可以使用該變數,作用域最大
  • 環境變數:要申明環境變數,先要建立環境,然後在該環境中建立變數。如果要想使用環境變數,必須先匯入這個環境,這樣才可以使用這個環境下的變數了。環境可以建立多個,每個環境下又可以有多個變數。
  • 集合變數:集合變數是針對集合的,即申明的變數只能用於某個集合,使用範圍也僅限於該集合之內。

    以上三種變數的範圍從大到小依次為全域性變數 > 集合變數 > 環境變數,如果要想使用變數,則需要進行兩步操作定義變數 、訪問變數

2.3.5.1 定義變數

    定義全域性變數和環境變數,點選Postman右上角眼睛圖示,在彈出的介面就可以根據需要定義全域性變數和環境變數。

  • 定義全域性變數

    操作步驟如下所示:
1.點選Postman右上角眼睛圖示
2.在彈出的介面中,點選Globals後面的Add
3.在上面第2步彈出的介面填寫全域性變數名稱及其相應的值,最後點選Save,儲存全域性變數
    以上操作步驟如下所示:

0225新增全域性變數步驟.png

  • 定義環境變數

    操作步驟如下所示:
1.在Postman左側點選Environments,再點選左上角+
2.在彈出的介面中輸入環境名稱,並新增對應的環境變數
3.點選Save,儲存環境變數

    以上操作步驟如下所示:

0226新增環境變數步驟.png

  • 檢視全域性變數和環境變數

    操作步驟如下所示:
1.在右側點選下拉選單列表,選擇其中一個環境
2.點選Postman右上角眼睛圖示,即可檢視對應環境變數和全域性變數

    以上操作步驟如下所示:

0227檢視全域性變數和環境變數.png

  • 定義集合變數

    操作步驟如下所示:
1.在Postman左側點選Collections,選擇任意一個Collection
2.在彈出的右側中,選擇Variable選項卡
3.填寫相應的集合變數資訊即可

    以上操作步驟如下所示:

0228新增集合變數.png

  • 程式碼定義變數

    除了以上三種方式定義變數,也可以在Tests和Pre-requests Script中進行定義
定義全域性變數:pm.globals.set("變數名",變數值)
定義環境變數:pm.environment.set("變數名",變數值)
定義集合變數:pm.collectionVariables.set("變數名",變數值)

    示例如下所示:

0229定義變數InPreRequests.png

  • 其他定義變數

    定義變數除了以上幾種方式,還有另外一種方式。這種方式定義變數在不同的位置,編寫也有所不同,通過可以在URL、Params、Authorization、Headers和Body中定義,其操作步驟如下所示:
1.在URL、Params、Authorization、Headers和Body建立一個空的變數名
2.在以上位置把要建立變數的值右鍵選擇Set:環境|全域性
3.選擇其中一個變數名即可

    以上操作步驟如下所示:

0230其他定義變數.png

2.3.5.2 獲取變數

    在定義好變數就可以獲取並使用變數了。在不同的位置獲取變數,編寫的規則也不盡相同,需要注意一下:

  • 如果是在請求引數中獲取變數(URL、Params、Authorization、Headers和Body),無論是全域性變數、環境變數,還是集合變數,獲取的方式都是如下的規則:

{{變數名}}

  • 如果變數位於Tests和Pre-requests Script,則獲取不同型別的變數,編寫的程式碼有所區別,如下所示:

獲取全域性變數:pm.globals.get("變數名")
獲取環境變數:pm.environment.get("變數名")
獲取集合變數:pm.collectionVariables.get("變數名")

    以上示例如下所示:

0231獲取變數值.png

變數的使用地方非常多,如介面關聯等,請求前置指令碼中會使用到變數等。

2.3.6 前置指令碼

    前置指令碼其實就是在Pre-requests Script中編寫的JavaScript指令碼。

2.3.6.1 執行順序

    在請求傳送之前,會先執行Pre-requests Script中的程式碼

2.3.6.2 使用場景

    一般常用在傳送請求前,需要對介面資料做進一步處理。如呼叫一個介面前,需要獲取到使用的cookie等。

前置指令碼主要用於在傳送請求之前,需要對傳送的介面資料做進一步處理都可以使用前置指令碼功能

2.3.6.2 實戰示例

    我們以一個登入介面為示例,該介面基本資訊如下所示:

  • 請求的登入介面地址,有一個引數是需要獲取當前系統時間
  • 介面地址:http://httpbin.org/post
  • 介面引數如下所示:

0231獲取系統時間戳.png

    實現步驟如下所示:

  • 1.在前置指令碼中編寫獲取系統時間戳的程式碼,如下所示:
var timestamp=Date.parse(new Date())/1000
  • 2.將該值儲存為環境變數,如下所示:
pm.environment.set("timestamp",timestamp)
  • 3、獲取變數的值並傳遞給引數timestamp

    以下詳細操作結果如下所示:

0232前置指令碼示例.png

2.4 介面關聯

2.4.1 介面關聯定義

    在日常測試過程,經常會碰到這種情況。介面A返回的資料需要做為介面B的請求引數(即介面A的輸出引數做為介面B的輸入引數),我們稱這種情況為 介面關聯

2.4.2 介面關聯實現思路

    我們拋開Postman來整理下通用思路,如下所示:

  • 1、獲取上一個介面的返回資料
  • 2、將返回的資料儲存一個變數
  • 3、在下一個介面傳送請求前,獲取變數的值

    在Postman中如何實現呢?我們可以參考通用思路整理成以下的方式:

  • 1、傳送請求並獲取到上一個介面的返回資料
  • 2、將返回的資料儲存為全域性或環境變數
  • 3、在下一個介面傳送請求前,獲取全域性或環境變數的值

2.4.3 介面關聯實踐示例

    示例相應的介面說明如下所示:

  • 1.介面A實現登入示例,其返回資料中會有一個引數timestamp引數
  • 2.介面B實現傳送請求前,需要獲取介面A返回資料中的timestamp值,做為本身的請求引數

    介面A的返回資料如下所示:

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "password": "surpass",
        "timestamp": "1633851549",
        "username": "diana"
    },
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": "no-cache",
        "Content-Length": "52",
        "Content-Type": "application/x-www-form-urlencoded",
        "Host": "httpbin.org",
        "Postman-Token": "0247d754-25a1-4775-9673-348ce30678a1",
        "User-Agent": "PostmanRuntime/7.28.4",
        "X-Amzn-Trace-Id": "Root=1-6162989d-329af5e75ae151953220e30d"
    },
    "json": null,
    "origin": "183.192.236.236",
    "url": "http://httpbin.org/post"
}

    最終實現步驟如下所示:

  • 1.獲取介面A的返回資料並儲存為環境變數

0233獲取返回資料並設定為環境變數.png

  • 2、在介面B中獲取環境/全域性變數的值

0234獲取並使用上一個介面的值.png

2.5 返回資料獲取

    在做介面測試,返回資料比較多的一般為JSON格式,可能存在多層巢狀,所以對返回的JSON進行取值也不全一樣,我們來看看在Postman裡面如何獲取,在Postman中獲取JSON資料的格式通常如下所示:

  • 單層結構: .key

  • 多層巢狀:.key.key

  • 多層巢狀帶陣列:.key[index]

  • 請求資料如下所示:

{
    "personInfo": [
        {
            "nickName": "Surpass",
            "realName": "lyl"
        },
        {
            "nickName": "Diana",
            "realName": "zq"
        }
    ],
    "location": "sh"
}
  • 介面返回資料如下所示:
{
    "args": {},
    "data": "{\r\n    \"personInfo\":[\r\n        {\"nickName\":\"Surpass\",\"realName\":\"lyl\"},\r\n        {\"nickName\":\"Diana\",\"realName\":\"zq\"}\r\n    ],\r\n    \"location\":\"sh\"\r\n}",
    "files": {},
    "form": {},
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": "no-cache",
        "Content-Length": "149",
        "Content-Type": "application/json",
        "Host": "httpbin.org",
        "Postman-Token": "6bbae7e9-3ef5-4f52-8737-fc4dcd80cf8f",
        "User-Agent": "PostmanRuntime/7.28.4",
        "X-Amzn-Trace-Id": "Root=1-6162a8bf-0e14645445d34fe042ea136b"
    },
    "json": {
        "location": "sh",
        "personInfo": [
            {
                "nickName": "Surpass",
                "realName": "lyl"
            },
            {
                "nickName": "Diana",
                "realName": "zq"
            }
        ]
    },
    "origin": "183.192.236.236",
    "url": "http://httpbin.org/post"
}

1.單層結構

    獲取返回資料中origin值,程式碼如下所示:

// 1.獲取請求返回的資料
var returnJsonData=pm.response.json()
console.log("Retuen json data is:",returnJsonData)
// 2.獲取對應變數的值
var returnDataValue=returnJsonData.origin
console.log("Retuen json data value is:",returnDataValue)

2.多層巢狀

    獲取返回資料中json中location值,程式碼如下所示:

// 1.獲取請求返回的資料
var returnJsonData=pm.response.json()
console.log("Retuen json data is:",returnJsonData)
// 2.獲取對應變數的值
var returnDataValue=returnJsonData.json.location
console.log("Retuen json data value is:",returnDataValue)

3.多層巢狀帶陣列

    獲取返回資料中json中personInfo第二個值,程式碼如下所示:

// 1.獲取請求返回的資料
var returnJsonData=pm.response.json()
console.log("Retuen json data is:",returnJsonData)
// 2.獲取對應變數的值
var returnDataValue=returnJsonData.json.personInfo[1]
console.log("Retuen json data value is:",returnDataValue)

在JavaScript索引從0開始

原文地址:https://www.cnblogs.com/surpassme/p/15390018.html

本文同步在微信訂閱號上釋出,如各位小夥伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼新增關注:
MyQRCode.jpg