Postman工具使用教程

Postman

1. 什麼Postman

Postman是一款功能強大的HTTP除錯與模擬外掛/工具,不僅可以除錯簡單的CSS、HTML、指令碼等網頁的基本資訊,它還可以傳送幾乎所有型別的HTTP請求。Postman適用於不同的作業系統,Mac、WindowsX32、Windows X64、Linux系統等。本篇主要介紹了Postman的安裝、更新和介面佈局功能。>> 外掛安裝

2. Postman下載安裝

官方網站:

https://www。getpostman。com/downloads/

3. 基本功能介紹

1。 Collections:在Postman中,Collection類似資料夾,可以把同一個專案的請求放在一個Collection裡方便管理和分享,Collection裡面也可以再建資料夾。如果做API文件的話,可以每個API對應一條請求,如果要把各種輸入都測到的話,就需要每條測試一條請求了。這裡我新建了一個example用於介紹整個流程,五個API對應五條請求。這個Collection可以透過https://www。getpostman。com/collections/c8f98a1120357e0d4a5a匯入你自己的Postman中。

2。 上面的黑字註冊是請求的名字,如果有Request description的話會顯示在這下面。下面的藍字是儲存起來的請求結果,點選可以載入某次請求的引數和返回值。我會用這個功能給做客戶端的同事展示不同情況下的各種返回值。儲存請求的按鈕在15。

3。 選擇HTTP Method的地方,各種常見的不常見的非常全。

4。 請求URL,兩層大括號表示這是一個環境變數,可以在16的位置選擇當前的environment,環境變數就會被替換成該environment裡variable的值。

5。 點選可以設定URL引數的key和value

6。 點擊發送請求

7。 點選儲存請求到Collection,如果要另存為的話,可以點選右邊的下箭頭

8。 設定鑑權引數,可以用OAuth之類的

9。 自定義HTTP Header,有些因為Chrome願意不能自定義的需要另外裝一個外掛Interceptor,在16上面一行的衛星那裡

10。 設定Request body,13那裡顯示的就是body的內容

11。 在發起請求之前執行的指令碼,例如request body裡的那兩個random變數,就是每次請求之前臨時生成的。

12。 在收到response之後執行的測試,測試的結果會顯示在17的位置

13。 有四種形式可以選擇,form-data主要用於上傳檔案。x-www-form-urlencoded是表單常用的格式。raw可以用來上傳JSON資料

14。 返回資料的格式,Pretty可以看到格式化後的JSON,Raw就是未經處理的資料,Preview可以預覽HTML頁面

15。 點選這裡把請求儲存到2的位置

16。 設定environment variables和global variables,點選右邊的x可以快速檢視當前的變數。

17。 測試執行的結果,一共幾個測試,通過幾個。

4.Postman工作原理

在使用一款工具前,瞭解它的工作原理才能讓你更快更有效的上手。我們知道對於一個API來說,輸入的請求(Request)包括URL、method、Request Cookies、Request Headers和Request Body;服務端收到請求後,API會回覆響應(Response),包括Response Headers和Response Body。我們之所以可以用Postman作為我們的API自動化測試工具,是因為它能很好的模擬客戶端並向服務端API傳送Request,客戶端接收服務端API發回的Response,並透過寫在Test中的JS函式來對Response做斷言。當然,Postman還有環境變數、Pre-request Script等更高階的功能,不過只要有了這些最基本功能就可以成為一個合格的API測試工具了。

5.常用功能詳解

5.1 Request部分

Request部分用於組合Request的各部分並向服務端API傳送。

5.1.1請求URL

不管傳送任何請求,確定要填寫的URL是第一件事,尤其是當你習慣複製一個類似的用例改寫成新用例的時候,很容易忽略URL是否完全一致,有時候出了問題排查半天發現原來少了一級URL……

有些URL中會自帶請求引數(一般都是key=value的形式),點選URL後面的Params按鈕可以開啟引數編輯器,Postman會自動將網址分成鍵-值對兩部分。

注意:如果沒有為URL指定協議,Postman會自動將http://新增到URL的開頭。

5.1.2 請求方法

根據不同的API操作需要使用不同的請求方法,Postman有很齊全的方法型別。同時,不同的請求方法也會影響Request Body的編輯區,比如選擇GET方法時,Body區會處於無法編輯狀態。

5.1.3 Authorization(瞭解)

授權過程就是驗證我們是否有許可權從伺服器訪問所需的資料。傳送請求時,通常必須包含引數以確保請求有權訪問並返回所需的資料。Postman提供的授權型別可以讓我們輕鬆處理Postman進行介面測試中的身份驗證協議

Authorization(鑑權資訊)其實是Headers的一部分,但由於這個引數的形式多變且非常重要,Postman將其獨立出來方便使用者進行設定。當在postman中選擇Authorization的型別的時候,可以看到一共有10個型別,這裡簡單介紹一下常見型別,以後用到某種的時候可以再詳細瞭解:可參考https://www。jianshu。com/p/8bb80594d126

a. Inherit auth from parent (從父類繼承身份驗證)

當用戶在一個集合內新增資料夾時,這個新新增的資料夾會預設使用Inherit auth from parent,即這個子資料夾內的每個Authorization型別都與父類的一致。比如在下圖中,我在塊閘道器中的Authorization型別是Bearer Token,則test_add中的所有請求將使用Bearer Token。

b. No Auth

如果不需要授權引數傳送請求時,使用“No Auth”

c. Bearer Token

Bearer Token是安全令牌。任何帶有Bearer Token的使用者都可以使用它來訪問資料資源,而無需使用加密金鑰。

d. Basic Auth

Basic Auth是一種授權型別,需要驗證使用者名稱和密碼才能訪問資料資源

5.1.4 請求Headers

在Headers區域可以以鍵值對的形式來設定請求頭內容,包括髮送內容格式,要求返回訊息語言等等。如果設定了Authorization,在傳送請求時也會將鑑權資訊自動填入Headers中

5.1.5 請求Cookies

在Postman的Native App中,我們可以透過Cookie管理器管理每個域名對應的Cookie。(我目前接觸到的內部產品中還沒有需要使用Cookie的部分)。

cookie:

網站分配給使用者標識資訊

儲存在使用者電腦中

session:

網站記錄每個使用者會話資訊 儲存在網站伺服器中

5.1.6 請求Body

Request的主要內容在Body的輸入區中編輯。在輸入區上方有四個選項,根據請求體型別有不同的輸入UI:

5.1.7 GraphQL(瞭解,擴充套件

https://www。jianshu。com/p/f705875e9ac6

a.form-data

Web表單用於傳輸資料的預設編碼,一般模擬網站上填寫表單並提交時使用這個選項。

b. x-www-form-urlencoded

該編碼與URL引數中使用的編碼相同。

c. raw

RAW請求可以包含任何內容,Postman只會替換其中的環境變數而不會改變其中的編輯內容。

d. binary

二進位制資料可讓我們傳送Postman中無法輸入的內容,例如影象,音訊或影片檔案。

5.2 Script部分

在Postman中,Script部分被放在最前面和最後執行,可以完成預處理和斷言的功能,順序如下:

Pre-request Script → Request → Response→ Tests

5.2.1 Pre-request Script

前置請求指令碼中的程式碼段會在Request傳送前執行,一般會在需要設定Request內容包含動態/隨機值時使用。Postman中給出了幾種常用模板,可以根據實際情況改寫模板內容,如下圖中的程式碼段會在Request傳送前向環境變數中新增一個名為phone和pwd的引數:

pm。environment。set(“phone”, “18810609766”);

pm。environment。set(“pwd”,“abc123”);

引用 >> 雙括號

5.2.2 Tests 》》

相較於Pre-request Script,Tests的應用場景更常見,建議每個用例中都在Tests至少新增一條函式作為斷言。像之前介紹的,Tests中的程式碼段會在收到Response後執行,並根據Response的內容與之前的預期值作比較。Postman在Tests中給出的常用模板更多,下面舉例幾種常見的用法:

a. 判斷返回碼

用如下函式判斷返回的狀態碼是否正常,一般成功訊息的返回碼是200

pm。test(“Status code is 200”, function () {

pm。response。to。have。status(200);

});

b. 判斷Response訊息體中是否包含預期字串

用如下函式判斷Response Body中是否含有字串“object already exists”

pm。test(“Body matches string”, function () {

pm。expect(pm。response。text())。to。include(“object already exists”);

});

//判斷某個欄位的值

pm。test(“判斷password的值”, function () {

var jsonData = pm。response。json();

pm。expect(jsonData。data。password)。to。eql(“liu123456”);

//資料格式轉化

var codestr = jsonData。code ;

console。log(parseInt(codestr))

//資料格式轉化

var num = parseInt(codestr);

console。log(num。toString());

});

5.3 檢視介面測試列印log

經常在指令碼中使用變數時,你可能需要看到變數獲取到的值,你可以使用

Postman Console

去實現的。操作步驟:

應用選單

——>View——->

Show Postman Console

,去列印變數的值。你可以在request的Pre-request Script和Tests 中填寫

console.log(),

當你傳送請求時,此指令碼將會執行,引數對應的值也會列印在

Postman Console中。

5.3.1 查詢Show Postman Console

5.3.2 開啟Postman Console的頁面及提供的功能介紹。

5.3.3 request的Pre-request Script 和Tests中填寫console.log(),填寫後點擊“send”執行

5.3.4 檢視運行當前介面在console中列印的日誌

5.4 資料型別轉換

postman中編寫Pre-request Script和tests時,字串和數字之間的轉換

5.4.1 js字串轉換成數字

將字串轉換成數字,得用到parseInt()函式

parseInt(string) : 函式從string的開始解析,返回一個整數

舉例:parseInt(‘123’) : 返回 123(int);

parseInt(‘123xxx’) : 返回 1234(int);

如果解析不到數字,則將返回一個NaN的值,可以用isNaN()函式來檢測其引數是否是非數字值;

舉例 :

var i = parseInt(“abc”);

if (isNaN(i))

{

console。log(‘NaN value’);

}

同樣的parseFloat函式是將字串轉換成浮點數

舉例:parseFloat(‘31。24abc’) : 返回 31。24;

5.4.2 js數字轉換成字串

將數字int轉換成字串String,得用到String類的toString方法;

舉例:

var i = 10;

var s = i。toString();

5.4.3 js數字與字串的區別

js的數字的加法與字串的連線都是 + 符號, 所以究竟是加還是字串的連線就取決與變數的型別。

舉例:

var a = ‘abc’ +‘xyz’; //a的值為:abcxyz,字串與字串是連線

var a = 10 +5; //a的值為:15,數字是加

var a = ‘abc’ +10; //a的值為:abc10,字串與數字, 自動將10轉換成字串了

var a = ‘abc’ + 10 + 20 + ‘cd’;

//a的值為:abc1020cd

var a = 10 + 20 + ‘abc’ + ‘cd’; //a的值為:30abccd,可以數字加的先數字加,然後再連線

如果從html頁面元素得到的值,想按數字加,就需要先轉換為數字,因為從頁面得到的值預設是字串。

5.5 環境變數

在編輯Request和Script各部分時,我們常常會發現某些固定值需要使用許多次,一旦這些值需要發生變化時可能需要修改每一個用例。最常見的是URL中的IP值,幾乎會出現在一個Collection中的每個用例中。我們可以將這樣的值以鍵值對的形式在環境變數中定義,並在需要使用時直接引用環境變數的key值。這樣,後續發生變化時,我們只需要直接修改環境變數中的值即可。

新增環境變數:

引用環境變數只需要用{{變數名}}替換原來的值就可以了,當滑鼠移動到變數上方時會顯示當前的變數值。

與程式碼中的變數相同,Postman中的環境變數也有作用域的概念。一般建議為一組Collection設定一組環境作用域變數,如果有需要的話可以在檢視環境變數介面編輯全域性變數,全域性變數預設對所有用例都生效。

切換環境變數:

檢視環境變數:

c. 新增環境變數

在Tests中

先定義變數獲取body中返回的所有引數,再把返回引數中的userId和sessionId設定為環境變數。

解析響應體(兩種方式)

var jsonData =JSON。parse(responseBody);

或者

var jsonData = pm。response。json();

設定環境變數

pm。environment。set(“userId”, jsonData。result。userId);

pm。environment。set(“sessionId”,jsonData。result。sessionId);

注意:JS程式碼段中不能直接引用環境變數,需要時可以先定義變數並用pm。environment。get()方法獲取環境變數,然後引用該變數。

斷言結果會在Response部分展示出來:

5.6 Response部分

API響應由正文,響應頭和狀態碼組成。Postman將響應體和響應頭放在不同的標籤中顯示;API呼叫所需時間、API響應狀態碼顯示在選項卡旁邊。如下圖所示:

5.7 執行用例

編輯好每個用例後,可以統一執行一個Collection中的用例:

在彈出的視窗左側可以選擇執行的環境變數、設定每條用例前的延時時間等操作,右側是之前的測試結果。

完成測試後會生成測試報告,包括每個用例中每個斷言是否執行成功:

5.8 批次引數化

如:搜尋介面,需要搜尋“高跟鞋”、“手機”、“電腦”、“電冰箱”等關鍵字

1。新建txt檔案(此處命名為data。txt),使用notepad++編輯,第一行寫下引數名,第二行開始,逐行寫下引數各值,編碼格式設定為UTF-8

2。在Pre-request Script中,獲取引數值,並傳到搜尋介面

3。在collection runner中設定

注:點選Preview,可以檢視迭代次數以及每次迭代所傳的值。如果data。txt的編碼格式沒有設定好,這裡可能會出現中文亂碼問題

5.9 匯出用例

當需要將用例共享給其他人時,可以將Collection和環境變數匯出,其他人匯入後就可以正常使用。

匯出Collection:

匯出環境變數:

6.使用Postman的模擬(mock)後端服務

6.1 Mock常見的使用場景:

1、無法控制第三方系統某介面的返回,返回的資料不滿足要求

比如:支付中最常用的刷卡支付,有可能直接支付成功,也有可能返回支付中,此邏輯受平臺方風控邏輯校驗,對我們來說完全是黑盒子

2、某依賴系統還未開發完成,就需要對被測系統進行測試

前端開發比較依賴後端開發提供的介面,然後根據介面返回值設計各類場景頁面。當服務端開發人員未及時提供介面時可能會影響到前端開發及整個專案的進度,特別是在敏捷開發中,對於上下游開發順序更加依賴

3、有些系統不支援重複請求,如支付功能

4、系統功能有訪問頻次限制,獲取敏感資訊的介面訪問頻次不可高於xx等

Postman很好的解決了這一問題,它可以mock模擬依賴介面的返回值,這樣就可以專注的測試當前介面。

透過Mock解決,可以提高前端工程師開發效率,也可以編寫為介面規範

要訪問的第三方url,以mock url代替,這樣即可滿足最基本的mock需求

6.2以下使用Postman建立mock-server,並建立可以請求的介面。

1、開啟Postman,新建一個Mock Server

錄入Request Path 。response Body這裡可以先隨便填,後面可以再修改

填寫mock server name,點選create按鈕

建立完成,生成了mock-url

2、定義request

1)。上一步在Collections的mock server下已經生成了兩個名為mockget 、mockpost的request

2)。 任意開啟其中一個request,選擇environment為mock server

3)。 自定義介面的返回值,在右上角add example,default是預設的返回值,即最初建立mock server時手動新增的返回值(可以設定成功和失敗)

3、點選send按鈕,傳送請求

需要It資料的可以關注我,私信獲取需要的資料哦