史上最詳細的postman使用介紹
Postman是一款功能強大的網頁調試與發(fā)送網頁HTTP請求的Chrome插件
一、設置postman主題
右上角的設置里可以設置postman的主題

這里,出于個人習慣,我把它設置成了黑色

二、postman基礎功能介紹
首先,看一下它的基礎功能:

collection在postman里面相當于一個文件夾,可以把同一個項目的請求放在一個Collection里方便管理和分享,Collection里面也可以再建文件夾。這里我們做一個普通接口的簡單的示例:

新建一個文件夾

創(chuàng)建一個文件集

新建一個請求

給這接口明明為查詢上海天氣并保存

點擊該請求,現(xiàn)在是空白的

輸入一個get請求,params里會自動顯示參數(shù)
該請求是聚合數(shù)據(jù)提供的一個查詢天氣的接口,大概還有幾百次的次數(shù)可以用:
http://v.juhe.cn/weather/index?format=2&cityname=南京&key=64aa04d276d1ed4fd5a147d97e16b87e
點擊send,查詢成功

成功查詢到上海天氣
這樣就完成了一次簡單的天氣查詢接口的請求
三、請求區(qū)域介紹

1???Authorization:身份驗證,主要用來填寫用戶名密碼,以及一些驗簽字段,postman有一個helpers可以幫助我們簡化一些重復和復雜的任務。當前的一套helpers可以幫助你解決一些authentication protocols的問題。;
2??Headers:請求的頭部信息
3??Body:post請求時必須要帶的參數(shù),里面放一些key-value鍵值對
4??Pre-requerst Script:可以讓你在 請求之前自定義請求數(shù)據(jù),這個運行在請求之前,語法使用JavaScript語句。
5??tests:tests標簽功能比較強大,通常用來寫測試,它是運行在請求之后。支持JavaScript語法。postman每次執(zhí)行request的時候,會執(zhí)行tests。測試結果會在tests的tab上面顯示一個通過的數(shù)量以及對錯情況。這個后面會進行詳解,它也可以用來設計用例,比如要測試返回結果是否含有某一字符串
6??form-data:,它將表單數(shù)據(jù)處理為一條消息,以標簽為單元,用分隔符分開。既可以單獨上傳鍵值對,也可以直接上傳文件(當上傳字段是文件時,會有Content-Type來說明文件類型,但該文件不會作為歷史保存,只能在每次需要發(fā)送請求的時候,重新添加文件。);post請求里較常用的一種

上傳文件
7??x-www-form-urlencoded:對應信息頭-application/x-www-from-urlencoded,會將表單內的數(shù)據(jù)轉換為鍵值對;
8??raw:可以上傳任意類型的文本,比如text、json、xml等,所有填寫的text都會隨著請求發(fā)送;
9??binary:對應信息頭-Content-Type:application/octet-stream,只能上傳二進制文件,且沒有鍵值對,一次只能上傳一個文件, 也不能保存歷史,每次選擇文件,提交;
四、導出和導入接口集:
postman支持非常方便的導入和導出接口集,繼續(xù)操作如下:
導出



數(shù)據(jù)一般以postman_collection.json結尾
導入



為了區(qū)分,我把他們名稱改了
ok,這樣就是簡單的導入導出collection集合
五、關于設置環(huán)境變量:
Global---全局
Enviroment --- 環(huán)境變量
Local --- 局部
Data ---- 數(shù)據(jù)
優(yōu)先級從高到底 Data ---- > Local ---- > Enviroment ---- > Global
postman支持很方便的設置環(huán)境變量以及全局變量,并可以一鍵切換不同環(huán)境

可以一鍵切換環(huán)境,選擇No Environment則不使用環(huán)境變量,僅適用全局變量
可以查看當前環(huán)境中的變量和全局變量(Globals)的值

進入設置頁面

如新建一套環(huán)境dome

選擇我們剛才創(chuàng)建的環(huán)境,點擊眼睛可以看到我們設置的變量值

創(chuàng)建環(huán)境變量能夠很方便的調取我們所需的數(shù)據(jù)
六、將返回值的某個數(shù)據(jù)設置為環(huán)境變量
在某些時候,我們需要獲取到一個變量,并保存下來,因為在后面我們會使用到。比如token,sign等信息
這時候就需要用到tests區(qū)域了,使用其強大的js語法
下面是一個簡單的將返回值的某個數(shù)據(jù)設置為環(huán)境變量或者全局變量的介紹:
定義一個xxx,獲取body中返回的所有參數(shù),并轉化為JSON格式 var xxx = JSON.parse(responseBody);
//把json字符串轉化為對象。parse()會進行json格式的檢查是一個安全的函數(shù), 如:檢查json中某個數(shù)組元素的個數(shù)(這里檢測programs的長度)
var data = JSON.parse(responseBody);tests["program's lenght"] = data.programs.length === 5;
將返回中的值設置為一個環(huán)境變量 pm.environment.set("key",xxx.data.value);或者postman.setEnvironmentVariable("key", "value");
將返回中的值設置為一個全局變量, ? ?pm.globals.set("key",xxx.data.value);或者postman.setGlobalVariable("key", "value");
//注意:Global后面不能加S,value值一定要指定到某個具體節(jié)點
實際操作一下:
一個微信登錄的接口token值獲取

這是一個微信登錄的接口,屬于post方法,里面的必須參數(shù)是unionid,這里我已經把unionid填在body里了,點擊send下面可以得到一個token
該登錄token每次請求的值都是不一樣的,屬于一個動態(tài)值。而后面我們的所有接口請求都需要這個token,現(xiàn)在就可以使用tests將它放置在環(huán)境變量里

var acquiretoken = JSON.parse(responseBody);
//定義一個acquiretoken方法(獲取token),把responseBody轉為json字符串
pm.environment.set("token",acquiretoken.data.token);
//將token變量放置到當前環(huán)境變量里去
再次執(zhí)行send后,點擊右上角小眼睛

發(fā)現(xiàn)變量就儲存在了dome的環(huán)境變量里,每次點擊send進行請求,發(fā)現(xiàn)環(huán)境變量里token都會隨著結果變化而變化。
同理,全局變量統(tǒng)一可以這樣設置
在設置過變量后,調用變量的時候,在postman里也比較方便,直接使用{{變量名}}就可以了,
加入我們在body里需要一個token值,那么我們可以直接在引用在環(huán)境變量里儲存的token,例如:

引用變量的時候會有一定的提示

變顏色代表引入變量成功
上面的效果和下面這種把一點點輸入的的效果是一樣的!

七、其他的常用tests方法:
在postman里,內置了一些常用的方法:

可以很方便的調用
下面我也整理了一些常用的tests方法,分享給大家
測試response Headers中的某個元素是否存在 tests["元素Content-Type是否存在"] = postman.getResponseHeader("Content-Type");
//getResponseHeader()方法會返回header的值;
定義一個xxx,獲取headers值 var.xxx = postman.getResponseHeader("key");
將Headers中的值設置為一個環(huán)境變量 postman.setEnvironmentVariable("key",xxx);或者pm.environment.set("key",xxx);
檢查response的code值是否為200 tests["Status code is 200"] = responseCode.code === 200;
// tests["Status code is 200"]中的tests是一個內置對象,
tests["Status code is 200"]是指為這個斷言起個名稱叫”Status code is 200”,這個名稱可以自行修改。
responseCode.code === 200中的responseCode是內置對象,responseCode對象中有個屬性是code,是指HTTP狀態(tài)碼的code,判斷code是否為200.
綜合起來,這句代碼的意思是:名稱為”Status code is 200”的斷言中,判斷responseCode對象的code屬性值(HTTP狀態(tài)碼)是否為200。
檢查response的body中是否包含字符串 tests["Body matches string"] = responseBody.has("type");
// tests["Body matches string"]中的tests是一個內置對象,
tests["Body matches string"]是指為這個斷言起個名稱叫”Body matches string”,這個名稱可以自行修改。
這句代碼的意思是:名稱為”Body matches string”的斷言中判斷響應正文中是否包含:type這個字段。type無論是key或者value,只要匹配就可以。多個類型可用“,”分割。
檢查Response Body是否等于字符串 tests["測試點"] = responseBody === "Response Body返回的內容";
//這個可以用在接口返回內容為純字符串時,直接檢查整個返回結果的正確性
檢查Response time 是否小于200ms tests["Response time 小于200毫秒"] = responseTime < 200;
檢查Response time 是否大于200ms tests["Response time 大于200毫秒"] = responseTime > 200;
postman.setNextRequest('Request 4')
// postman.setNextRequest()是一個帶有一個參數(shù)的函數(shù),它是接下來要運行的請求的名稱或ID。往往用來跳轉至某個接口,只在運行該集合時有用,單獨運行無效
var jsonObject = xml2Json(responseBody);
//轉換XML body為JSON對象
設置一個隨機數(shù)變量 pm.globals.set("type",parseInt(4*Math.random())+1);
//針對不同類型的課程類型,設置一個1到4的隨機整數(shù),字段名是type,parselnt 是強制轉換為整數(shù)
校驗接口返回是否有數(shù)據(jù) tests["獲取第一個結果"] = xxx.content.jieguo[0];
//我的程序設置的是如果當前沒有數(shù)據(jù),則只返回content[],所以這句斷言可以校驗,如果content里還有數(shù)據(jù),則視為返回不為空
八、使用postman進行接口自動化測試
沒錯,使用postman也可以進行接口自動化的,是不是很神奇
首先,既然是自動化測試,那么我們肯定需要工具 (Postman) 或者代碼能幫我們直接判斷結果是否符合預期。那么在接口測試上,大體就兩個思路:
判斷請求返回的 code 是否符合預期
判斷請求返回的內容中是否包含預期的內容(關鍵字)
接下來我們看看如何利用 Postman 來解決上述的問題
--------------------
這是三個模擬天氣的接口集合,點擊擴展按鈕,找到RUN,進入


這里我們先簡單運行一次:

發(fā)現(xiàn),運行成功。里面我每個接口都寫了兩個tests進行校驗字段,所以上面一共有6條tests測試點被測試到,并且是成功的
每個接口里的tests數(shù)據(jù)如下:

當然,如果想要每次運行不一樣的數(shù)據(jù),我們需要其他的方法,比如,使用pre-requestScprit功能,導入或者生成隨機數(shù)據(jù)進行測試,這個后續(xù)我再進行講解
來源:jianshu.com/p/97ba64888894
