ostman是一款支持http協議的接口調試與測試工具,其主要特點就是功能強大,使用簡單且易用性好 。
無論是開發人員進行接口調試,還是測試人員做接口測試,postman都是我們的首選工具之一 。
那么接下來就介紹下postman到底有哪些功能,它們分別都能干些什么 。下面先通過一張圖來直觀的來看下postman中所包含的功能 。
圖片
當然,以上功能也只是展示了postman的一部分功能,為了能更加全面的體現這款工具的特點,我將從以下三個維度來加以說明。它們分別是:
postman 在 2018 年之后就不再支持瀏覽器版本,所以,想要使用它就必須先下載客戶端再安裝使用,下面就以 Windows 系統為例進行安裝 。
postman安裝步驟:
1. 訪問postman官方網站,下載最新版本
訪問地址:https://www.getpostman.com/
2. 進入到下載頁面,根據自己電腦下載對應的版本
圖片
3. 雙擊下載的安裝包,進入到安裝界面,直到用戶登錄和注冊界面。
若個人使用,選擇跳過即可,這時會進入到postman主界面,至此postman安裝成功(下圖)。
若團隊使用,可以進行注冊,注冊后使用賬號可以加入團隊工作區
圖片
初次使用postman的朋友可能對界面上的一些元素不太熟悉,下面就通過一張圖來說明這些元素的含義 。
圖片
如果你是第一次使用postman發送請求,下面這個例子可以作為一個最基本的入門,可以幫我們建立一個初始印象 。
1. 打開postman,點擊+加號打開一個新的請求頁。
2. 在請求的URL中輸入請求地址:
http://www.weather.com.cn/data/sk/101010100.html
3. 點擊Send按鈕,這時就可以在下部的窗格中看到來自服務器的json響應數據。
圖片
常見的接口有如下四種類型,分別是含有查詢參數的接口,表單類型的接口,json類型的接口以及含有上傳文件的接口,以下就對這四種類型接口及如何在postman中請求進行說明 。
什么是查詢參數?
所謂的查詢參數,其實就是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中輸入,倆者的效果是一樣的 。
什么是表單 ?
我們都知道,在發送HTTP請求的時候,一個請求中一般包含三個部分,分別是請求行,請求頭,請求體 。
不同的接口,請求體的數據類型是不一樣的,比較常見的一種就是表單類型,那么什么是表單類型呢 ?簡單理解就是在請求頭中查看Content-Type,它的值如果是:application/x-www-form-urlencoded .那么就說明客戶端提交的數據是以表單形式提交的 。見下圖:
圖片
postman中如何請求?
如果在postman請求上圖的接口,我們只需要填寫四個參數,分別是(可以參考上圖):
實現步驟:
圖片
在做接口測試時,我們經常會遇到需要上傳文件的接口,比如微信的更新頭像。這就需要用到: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中該如何請求呢 ?我們先分析需要填寫的參數 。
實現步驟:
圖片
這應該是接口測試中最常見的一種情況了 , 也就是請求體類型為json,我們來看下這個請求報文 。
POST http://xxx/api/sys/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
{"account":"root","password":"123456"}
根據以上報文,我們可以分析出,我們在postman只需要填寫四個參數即可,具體如下:
實現步驟:
圖片
響應數據是發送請求后經過服務器處理后返回的結果,響應由三部分組成,分別是狀態行、響應頭、響應體。我們來看下postman的響應數據展示。
圖片
在postman中的響應數據展示:
那么這些數據對我們做接口測試有什么作用呢 ?
接下來我們再來關注下Body中的幾個顯示主題,分別是:Pretty,Raw,Preview .
圖片
Pretty:翻譯成中文就是漂亮 , 也就是說返回的Body數據在這個標簽中查看 ,都是經過格式化的,格式化后的數據看起來更加直觀,所以postman默認展示的也是這個選項。比如返回html頁面,它會經過格式化成HTML格式后展示,比如返回json,那么也會格式化成json格式展示 。
Raw:翻譯成中文未經過加工的,也就是原始數據 ,原始數據一般都是本文格式的,未經過格式化處理的,一般在抓包工具中都有這個選項 。
Preview:翻譯成中文就是預覽,這個選項一般對返回HTML的頁面效果特別明顯,如請求百度后返回結果,點擊這個選項后就直接能查看到的頁面 ,如下圖 。同時這個選項和瀏覽器抓包中的Preview也是一樣的 。
圖片
當我們對一個或多個系統中的很多用例進行維護時,首先想到的就是對用例進行分類管理,同時還希望對這批用例做回歸測試 。在postman也提供了這樣一個功能,就是Collection 。通過這個Collection就可以滿足我們的上面說的需求。
先對Collection功能的使用場景做個簡單總結 。
那么Collection是如何去管理用例的呢 ?先想象我們要測試一個系統,系統下有多個模塊,每個模塊下有很多的被測接口用例 。那么基于這個場景,我們來通過Collection來進行實現:
1. 點擊Collection,點擊+New Collection,在彈出的輸入框中輸入Collection名稱(這個就可以理解為所測試的系統)
圖片
2. 選中新建的Collection右鍵,點擊Add Folder ,在彈出對話框中輸入文件夾名稱(這個就可以理解為系統中的模塊)
圖片
3. 選中新建的Folder,點擊Add Request ,在彈出的對話框中輸入請求名稱,這個就是我們所測試的接口,也可以理解為測試用例 。
圖片
那么通過以上三個步驟,達到的效果就是如圖所示:
圖片
總結,通過上面的操作,我們實現了一個最簡單的demo模型。但實際上,有了這個功能才是postman學習的開始,因為很多功能都是基礎這個功能的基礎上進行的,比如用例的批量執行,Mock ,接口文檔等功能 。
當我們在一個Collection中編寫了很多的接口測試用例,想一起執行這批用例,在postman中是如何操作呢 ?
實現步驟:
1. 選中一個Collection,點擊右三角,在彈出的界面點擊RUN
圖片
2. 這是會彈出一個叫Collection Runner的界面,默認會把Collection中的所有用例選中 。
圖片
3. 點擊界面下方的RUN Collection,就會對Collection中選中的所有測試用例運行 。
圖片
對上面的幾個紅框內的功能進行簡單說明:
總體來說,這個功能主要是用于對一個Collection中的所有用例或部分用例進行批量運行,已達到手工回歸測試的目的。
在做接口測試時,經常會因為代碼寫的有問題導致報錯,這時通過查看日志就顯得非常重要了,postman也提供了這樣的功能,它允許我們在腳本中編寫打印語句,查看打印的結果 ; 同時也可以查看每個請求的日志信息 。
在postman中編寫日志打印語句使用的是JavaScript,編寫的位置可以是Pre-request Script 或Tests標簽中。編寫打印語句如:console.log("我是一條日志")
圖片
那么打印的日如何看呢 ?在postman中有倆個入口,第一個入口就是:view-show postman console 。
第二個入口就是左下角第三個圖標 。
圖片
打開的日志界面:
圖片
這里面有幾個比較實用的功能:
總之,通過這個功能,我們在請求接口報錯時,通過打印響應的日志,就能很輕松的找到問題原因了 。
如果沒有斷言,我們只能做接口的功能測試,但有了斷言后,就為我們做自動化提供了條件,并且在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這倆個斷言又是重重之重。
變量可以使我們在請求或腳本中存儲和重復使用其值,通過將值保存在變量中,可以在集合,環境或請求中引用。
對我們做接口測試來說,又是一個非常重要的功能 。
在postman常用的三種變量分別是全局變量,環境變量,集合變量 。
其中,他們的作用域范圍依次從大到小:全局變量>集合變量>環境變量 。當在幾個不同的范圍內都申明了相同的變量時,則會優先使用范圍最小的變量使。
想要使用變量中的值只需倆個步驟,分別是定義變量和獲取變量 。
定義變量
定義全局變量和環境變量,點擊右上角的小齒輪,彈出如下界面,就可以根據需求定義全局變量或者環境變量了。
圖片
已經定義的全局變量和環境變量,可以進行快速查看:
圖片
定義集合變量
選擇一個集合,打開查看更多動作(...)菜單,然后點擊編輯 。選擇“變量”選項卡以編輯或添加到集合變量。
圖片
定義變量除了以上方式,還有另外一種方式 。但是這種方式在不同的位置定義,編寫不一樣。
在URL,Params , Authorization , Headers , Body中定義:
1. 手工方式創建一個空的變量名
2. 在以上的位置把想要的值選中右擊,選中Set:環境|全局 ,選中一個變量名,點擊后就會保存到這個變量中
圖片
在Tests,Pre-requests Script:
獲取變量
定義好變量,接下來就可以使用變量了 。需要注意的是,在不同的位置獲取變量,編寫的規則也是不一樣的 。
如果在請求參數中獲取變量,無論是獲取全局變量,還是環境變量,還是集合變量,獲取的方式都是一樣的編寫規則:{{變量名}} 。
如果是在編寫代碼的位置(Tests,Pre-requests Script)獲取變量,獲取不同類型的變量,編寫的代碼都不相同,具體如下:
圖片
變量的使用場景非常廣泛,比如我們后面要提到的接口關聯,請求前置腳本都會使用到變量 。
前置腳本其實就是在Pre-requests Script中編寫的JavaScript腳本,想要了解這個功能,需要先了解它的執行順序。那么下面就來看下它的執行順序 。
可以看出,一個請求在發送之前,會先去執行Pre Request Script(前置腳本)中的代碼 。那么這個功能在實際工作中有什么作用呢 ?
主要場景:一般情況下,在發送請求前需要對接口的數據做進一步處理,就都可以使用這個功能,比如說,登錄接口的密碼,在發送前需要做加密處理,那么就可以在前置腳本中做加密處理,再比如說,有的接口的輸入參數有一些隨機數,每請求一次接口參數值都會發送變化,就可以在前置腳本中編寫生成隨機數的代碼 。
總體來說,就是在請求接口之前對我們的請求數據進行進一步加工處理的都可以使用前置腳本這個功能。
接下來通過一個案例來看下該功能是如何使用 ?
案例:
圖片
實現步驟:
圖片
總之,這個前置腳本對我們做接口測試也非常有用,對一些復雜的場景,都可以使用前置腳本進行處理后再請求接口 。
在我們測試的接口中,經常出現這種情況 。上一個接口的返回數據是下一個接口的輸入參數 ,那么這倆個接口就產生了關聯。這種關聯在做接口測試時非常常見,那么在postman中,如何實現這種關聯關系呢 ?
實現思路:
案例:
{
"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 可以通過以下三步完成這倆個接口的關聯實現 。
實現步驟:
圖片
可以看出,接口的關聯的解決方案都是用的是變量中的知識,也就是說只要你明確了要提取的值,后面就是保存該值,然后在其他接口使用該值就可以了。
在做接口測試時,請求接口返回的數據都是很復雜的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
Postman 適用于 macOS 10.11 (El Capitan) 及更高版本。
下載地址:Download Postman | Get Started for Free
由于筆者用的是Mac電腦,且是以前老款的intel芯片的。不知道是什么芯片的可查看“關于本機”即可出現下面界面;最新Mac電腦有M1芯片架構的。注意區分即可。
點擊Mac intel Chip后即可進行下載進度,稍等一會就下載完成。
解壓--打開后雙擊進行安裝;
按提示把應用移動到應用里即可;升級安裝會有提示替換舊版本彈窗。注意選擇合適的按鈕
brew install --cask postman
命令安裝是最省心的,不過有的童鞋電腦可能不支持brew的命令。這個命令需要安裝額外的安裝包管理器。由于墻的原因可能安裝失敗。
到這里安裝完畢。下一步介紹基本使用;不知道有沒有童鞋搞定漢化哈!有的話給留個言