Postman 是一個用于構(gòu)建和使用 API 的 API 平臺,Postman 簡化了 API 生命周期的每個步驟并簡化了協(xié)作,可以更快地創(chuàng)建更好的 API。
版本說明:
下載安裝
Postman官網(wǎng)下載鏈接:https://www.postman.com/,根據(jù)自己的操作系統(tǒng)選擇。
找到下載到的目錄直接雙擊.exe文件,會默認(rèn)安裝在C盤,安裝完會自動打開。
注冊登錄
Postman最新版本已經(jīng)不維護(hù)離線模式(未登錄),要體驗全部功能需要登錄,若沒有Postman賬號可以注冊一個,若已有賬號,只要登錄就可。
官網(wǎng)注冊鏈接:https://identity.getpostman.com/signup。
注冊好后,在Postman界面點擊sign in進(jìn)行登錄(會從瀏覽器登錄后跳轉(zhuǎn)回應(yīng)用程序)。
Collection
Collection是多個Folder和Request的合集,可以添加Pre-request Script、Tests腳本和Variables變量,且作用于Collection里的所有Request。
選擇側(cè)邊欄的Collections,再點擊加號創(chuàng)建一個空的Collection新建Collection。
Collection相關(guān)說明如下圖:
刪除Collection:
快捷鍵刪除:選擇要刪除的Collection -> 點擊鍵盤Delete鍵 -> 確認(rèn)刪除。
Folder
Folder是多個Request的合集(對Request更加細(xì)分),只能在Collection下創(chuàng)建,可以添加Pre-request Script、Tests腳本,且作用于Folder下的所有Request。
選擇指定的Collection右側(cè)三個點,下拉彈窗選擇Add folder新建Folder。
Folder相關(guān)說明如下圖:
刪除Folder:
快捷鍵刪除:選擇要刪除的Folder -> 點擊鍵盤Delete鍵 -> 確認(rèn)刪除。
Request
Request是請求接口,可以在Collection或Folder下創(chuàng)建,可以添加Pre-request Script、Tests腳本,且只作用于當(dāng)前Request。
選擇指定的Collection或Folder右側(cè)的三個點,下拉彈窗選擇Add request新建Request。
Request相關(guān)說明如下圖:
Request未保存狀態(tài)窗口標(biāo)簽會有一個紅點提示。
刪除Request:
快捷鍵刪除:選擇要刪除的Request -> 點擊鍵盤Delete鍵 -> 確認(rèn)刪除。
注意:當(dāng)我們在窗口欄上點擊加號創(chuàng)建Request,是沒有指定保存在哪個Collection或Folder里的。
使用Ctrl+S保存時需要自己選擇保存到哪個地方。
Get請求
新建的Request默認(rèn)是Get請求,也可以通過左側(cè)的下拉彈窗修改。Get請求參數(shù)一般是在請求路徑后用"?"拼接,也可以在Postman的params手動添加參數(shù),會自動在請求路徑后面拼接,取消參數(shù)前面的勾選后請求不會攜帶該參數(shù)。
說明:
- Key:參數(shù)名。
- Value:參數(shù)值。
- Description:參數(shù)描述。
- BulkEdit:批量編輯。
Post請求
選擇請求方式為Post,請求參數(shù)在Body里設(shè)置,并選擇指定的格式。
說明:
- none:無參。
- form-data:表單格式,Content-Type為multipart/form-data。
- x-www-form-urlencoded:和表單類似鍵值對,但Content-Type為application/x-www-from-urlencoded。
- raw:其他格式,有Text、JavaScript、JSON、HTML和XML(上圖選擇的是JSON)。
- Beautify:根據(jù)選擇的格式(例如:JSON),格式化參數(shù),使參數(shù)方便閱讀。
Header設(shè)置
Postman請求頭在headers設(shè)置,例如:鑒權(quán)token等等,取消參數(shù)前面的勾選后請求不會攜帶。
說明:
- Key:參數(shù)名。
- Value:參數(shù)值。
- Description:參數(shù)描述。
- BulkEdit:批量編輯。
- Presets:預(yù)設(shè)可以設(shè)置固定幾個必攜帶的參數(shù),下次新建Request后可以點擊Presets選擇直接添加。
- 7Hidden:是隱藏了7個默認(rèn)的參數(shù),點擊旁邊的眼睛可以顯示隱藏部分。
刪除指定header參數(shù):(刪除圖標(biāo)默認(rèn)是隱藏的)
設(shè)置并使用預(yù)設(shè)header參數(shù):
- 找到管理預(yù)設(shè)Manage Presets。
- 選擇添加Header Presets。
- 添加預(yù)設(shè)header,可以添加多個header參數(shù),最后點擊add添加(下圖header值使用了動態(tài)變量后面會講到)。
- 選擇要使用的預(yù)設(shè)header,選擇后會自動在當(dāng)前Request的headers添加預(yù)設(shè)的header參數(shù)。
Response響應(yīng)
若Request有一些請求前執(zhí)行的腳本,在Pre-request Script下添加,請求后執(zhí)行的腳本,在Tests下添加(后面會講到腳本),最后點擊Send發(fā)送請求,并在Response區(qū)域查看請求結(jié)果。
說明:
- Body:請求體。
- Cookies:返回的Cookie信息。
- Headers:響應(yīng)頭。
- TestResults:Tests腳本執(zhí)行結(jié)果。
- Pretty:格式化后的結(jié)果。
- Raw:未格式化的結(jié)果。
- Preview:結(jié)果預(yù)覽。
- Status:請求狀態(tài)碼。
- Time:請求響應(yīng)時間。
- Size:請求響應(yīng)數(shù)據(jù)大小。
創(chuàng)建Request范例,點擊Save as example。
會在當(dāng)前Request下創(chuàng)建一個范例Request,這個Request是可以編輯的,也可以修改請求路徑和參數(shù)等信息。
注意:范例Request的修改不會影響原來的Request。
響應(yīng)結(jié)果另存為文件和清空:
Environments
Environments用來設(shè)置環(huán)境變量,默認(rèn)有一個且唯一的Globals全局變量,也可以自己創(chuàng)建多個環(huán)境變量。
Global環(huán)境變量
設(shè)置Global全局環(huán)境變量:
注意:Globals全局變量作用于整個Postman,包括Collection、Folder、Request和腳本。
其他環(huán)境變量
設(shè)置其他環(huán)境變量:(例如:本地、開發(fā)、測試、生產(chǎn)環(huán)境)
-
創(chuàng)建新環(huán)境。
-
新建環(huán)境重命名,并設(shè)置參數(shù)(和Globals一樣)。
Collection變量
設(shè)置Collection變量,作用于當(dāng)前Collection下的所有Folder和Request。把Collection Variables放Environments是為了方便說,它們都是設(shè)置變量,之間存在優(yōu)先級關(guān)系(查看下文)。
變量使用
語法:
{{variable_name}}
使用兩個雙大括號包裹變量名的方式引用,可以在請求路徑Url、請求參數(shù)Params、請求參數(shù)Body、請求Headers、Pre-request Script和Tests腳本里使用。
Globals環(huán)境變量使用:
注意:無論有沒有指定其他環(huán)境都可以使用Global變量,因為Global變量作用于整個Postman,當(dāng)Global和指定環(huán)境變量名同名時,指定環(huán)境比全局環(huán)境優(yōu)先級高,當(dāng)鼠標(biāo)光標(biāo)懸浮在使用的變量名上,可以展示當(dāng)前變量值和作用范圍。
指定環(huán)境變量使用:
Globals和指定其他環(huán)境變量預(yù)覽:
Collection變量使用:
同名變量的優(yōu)先級
當(dāng)Globals環(huán)境變量、其他環(huán)境變量和Collection變量同名時,使用該變量的優(yōu)先級是:指定的其他環(huán)境 -> Collection -> Globals。
Postman內(nèi)置變量
Postman內(nèi)置變量參考:https://learning.postman.com/docs/writing-scripts/script-references/variables-list/
常用內(nèi)置變量:
- 時間戳:
{{$timestamp}}
- 生成0-1000的隨機(jī)整數(shù):
{{$randomInt}}
- 生成一個GUID的字符串:
{{$guid}}
- 生成一個隨機(jī)UUID:
{{$randomUUID}}
注意:內(nèi)置變量和Environment、Collection變量一樣,只是它是內(nèi)部已經(jīng)定義好的,可以直接在請求參數(shù)和腳本中引用。
Pre-request script和Test script腳本
Postman 包含一個基于Node.js的強(qiáng)大的運(yùn)行時,允許您向請求Request、Collection和Folder添加動態(tài)行為,這允許您編寫測試套件,構(gòu)建可以包含動態(tài)參數(shù)的請求,在請求之間傳遞數(shù)據(jù)等等。
執(zhí)行流程的2個腳本事件:
- pre-request script:請求前腳本,在請求接口前執(zhí)行。
- test script:測試腳本,在請求接口并響應(yīng)數(shù)據(jù)后執(zhí)行。
腳本的執(zhí)行順序:
設(shè)置、刪除和獲取變量
//設(shè)置Collection變量
pm.collectionVariables.set("variable_name", "variable_value");
//設(shè)置Global變量
pm.globals.set("variable_name", "variable_value");
//設(shè)置Environment變量
pm.environment.set("variable_name", "variable_value");
//刪除Collection變量
pm.collectionVariables.unset("variable_name");
//刪除Global變量
pm.globals.unset("variable_name");
//刪除Environment變量
pm.environment.unset("variable_name");
//獲取變量(包括Global,Environment和Collection),同名變量,按照優(yōu)先級獲取
pm.variables.get("variable_name");
//獲取Global環(huán)境變量
pm.globals.get("variable_name");
//獲取Collection環(huán)境變量
pm.collectionVariables.get("variable_name");
//獲取Environment環(huán)境變量
pm.environment.get("variable_name");
Postman在編寫腳本的右側(cè)有代碼片段,只需要點擊一下就會在編輯框生成代碼片段,更友好的使用。
獲取請求參數(shù)
//raw請求方式
let body = pm.request.body.raw;
let data = JSON.parse(body);
//form-data請求方式
let param = pm.request.body.formdata.get("variable_name");
// x-www-form-urlencoded請求方式
let param = pm.request.body.urlencoded.get("variable_name");
獲取響應(yīng)數(shù)據(jù)
為了在響應(yīng)中執(zhí)行斷言,首先需要將數(shù)據(jù)解析為斷言可以使用的JavaScript對象。
//解析JSON
const responseJson = pm.response.json();
//解析xml
const responseXml = xml2Json(pm.response.text());
//解析csv
const parse = require('csv-parse/lib/sync');
const responseCsv = parse(pm.response.text());
//解析HTML
const temp = cheerio.load(pm.response.text());
console.log(temp.html());
如果不解析成JavaScript對象是不是就不可以斷言?當(dāng)然不是,也可以不解析響應(yīng)體斷言。
// 測試響應(yīng)體是否包含某個字符串
pm.test("Body contains string", () => {
pm.expect(pm.response.text()).to.include("customer_id");
}
MD5、AES、SHA256加密
//MD5
let token = CryptJS.MD5("文本內(nèi)容").toString();
//SHA256加密
let token = CryptJS.SHA256("文本內(nèi)容").toString();
//AES加密
function AesEncrypt(data, secret_key){
//密碼,文本,偏移量、模式等設(shè)置
var ECBOptions = {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7};
//加密密鑰
var AesSecert = CryptoJS.enc.Utf8.parse(secret_key);
//AES加密
return CryptoJS.AES.encrypt(data, AesSecert, ECBOptions).toString();
}
//AES解密
var ECBOptions = {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
};
function decrypt(data, secret_key) {
var AesSecert = CryptoJS.enc.Utf8.parse(secret_key);
return CryptoJS.AES.decrypt(body, AesSecert, ECBOptions).toString(CryptoJS.enc.Utf8);
}
sendRequest請求接口
當(dāng)我們在請求某個接口時,需要先從另一個接口獲取需要的數(shù)據(jù),或者在請求某個接口后再請求其他接口,這個時候就可以使用sendRequest。
語法:
pm.sendRequest(param, function(err, response){
//進(jìn)行其他操作(也可以再次調(diào)用sendRequest)
});
說明:
- param:請求接口信息(包括但不限于請求路徑、請求頭和請求方式)。
- err:接口異常信息。
- response:接口響應(yīng)數(shù)據(jù)。
注意:沒指定請求方式默認(rèn)是Get請求。
Get請求
//無參數(shù)無Header請求
pm.sendRequest("http://127.0.0.1:8090/demo/goods/list", function(err, resp) {
console.log(resp.json());
});
//攜帶Header請求
const param = {
//請求路徑
url: 'http://127.0.0.1:8090/demo/goods/list',
//請求方式
method: 'GET',
//請求頭
header: {
'token': '9e11562e553b4f56af43a1e81dcbb137'
}
};
pm.sendRequest(param, function(err, resp) {
console.log(resp.json());
});
//攜帶參數(shù)請求:在請求路徑后面用?號拼接,多個參數(shù)用&分隔
pm.sendRequest("http://127.0.0.1:8090/demo/goods/list?id=123&name=小饅頭", function(err, resp) {
console.log(resp.json());
});
//攜帶參數(shù)攜帶Header請求
const param = {
//請求路徑
url: 'http://127.0.0.1:8090/demo/goods/list?id=123&name=小饅頭',
//請求方式
method: 'GET',
//請求頭
header: {
'token': '9e11562e553b4f56af43a1e81dcbb137'
}
};
pm.sendRequest(param, function(err, resp) {
console.log(resp.json());
});
Post請求
Post請求和Get不同,請求參數(shù)在Body里,而Body有raw、x-www-form-urlencoded、form-data、xml模式。
raw模式
Content-Type設(shè)為application/json。
header: {
'Content-Type': 'application/json'
}
body的model設(shè)置為raw。
body: {
mode: 'raw',
raw: JSON.stringify({"data":{"name":"多味花生"}})
}
注意:raw的屬性格式是{"key1":"value1","key2":"value2"}
,JSON格式。
示例:
//定義請求入?yún)?/span>
const jsonParam = {
"data": {
"name": "多味花生"
}
};
//定義請求參數(shù)
const reqData = {
url: 'http://127.0.0.1:8090/demo/goods/info',
method: 'POST',
header: {
'Content-Type': 'application/json',
'signature': '0cc4d99e4d9941d19c324de7881b6a98'
},
body: {
mode: 'raw',
raw: JSON.stringify(jsonParam)
}
};
//發(fā)送請求
pm.sendRequest(reqData, function(err, resp) {
console.log(resp.json());
});
xxx-www-form-urlencoded模式
Content-Type設(shè)置為application/xxx-www-urlencoded;charset=UTF-8。
header: {
'Content-Type': 'application/xxx-www-urlencoded;charset=UTF-8'
}
body的mode設(shè)置為urlencoded。
body: {
mode: 'urlencoded',
urlencoded: 'name=多味花生&typeEnum=FOOD'
}
注意:urlencoded的屬性格式是key1:value1&key2:value2&key3:value3
,多個參數(shù)使用&隔開。
示例:
//定義請求參數(shù)
const reqData = {
url: 'http://127.0.0.1:8090/demo/goods/count',
method: 'POST',
header: {
'Content-Type': 'application/xxx-www-urlencoded;charset=UTF-8',
'signature': '0cc4d99e4d9941d19c324de7881b6a98'
},
body: {
mode: 'urlencoded',
urlencoded: 'name=多味花生&typeEnum=FOOD'
}
};
//發(fā)送請求
pm.sendRequest(reqData, function(err, resp) {
console.log(resp.json());
});
form-data模式
Content-Type設(shè)置為multipart/form-data。
header: {
'Content-Type': 'multipart/form-data'
}
body的mode設(shè)置為formdata。
body: {
mode: 'formdata',
formdata: [{key:"name", value:"谷粒多"},{key:"typeEnum",value:"FOOD"}]
}
注意:formdata的屬性格式是[{key:key1, value:value1},{key:key2, value:value2}]
,每個參數(shù)用{}包裹,多個參數(shù)用逗號隔開。
示例:
//定義請求參數(shù)
const reqData = {
url: 'http://127.0.0.1:8090/demo/goods/count',
method: 'POST',
header: {
'Content-Type': 'multipart/form-data',
'signature': '0cc4d99e4d9941d19c324de7881b6a98'
},
body: {
mode: 'formdata',
formdata: [{key:"name", value:"谷粒多"},{key:"typeEnum",value:"FOOD"}]
}
};
//發(fā)送請求
pm.sendRequest(reqData, function(err, resp) {
console.log(resp.json());
});
xml模式
Content-Type設(shè)置為application/xml。
header: {
'Content-Type': 'application/xml'
}
body的mode設(shè)置為raw。
body: {
mode: 'raw',
raw: '<count> <name>蛋仔</name> <type>ELECTRONICS</type> </count>'
}
注意:raw的屬性格式是<自定義標(biāo)簽>標(biāo)簽值</自定義標(biāo)簽>
,自定義標(biāo)簽名是請求參數(shù)名,標(biāo)簽值是參數(shù)值。
示例:
//定義請求參數(shù)
const reqData = {
url: 'http://127.0.0.1:8090/demo/goods/count',
method: 'POST',
header: {
'Content-Type': 'application/xml',
'signature': '0cc4d99e4d9941d19c324de7881b6a98'
},
body: {
mode: 'raw',
raw: '<count> <name>蛋仔</name> <type>ELECTRONICS</type> </count>'
}
};
//發(fā)送請求
pm.sendRequest(reqData, function(err, resp) {
console.log(resp.json());
});
斷言測試
pm對象提供了測試功能:
-
pm.test(testName:String, specFunction:Function):Function
:測試函數(shù)。 -
pm.expect(assertion:*):Function → Assertion
:允許在響應(yīng)數(shù)據(jù)上做測試,使用ChaiJS expect BDD語法。 -
pm.response.to.have.*
和pm.response.to.be.*
來構(gòu)建斷言。
測試狀態(tài)碼:
pm.test("請求狀態(tài)碼200", function() {
pm.response.to.have.status(200);
});
pm.test("請求狀態(tài)碼200", function() {
pm.expect(pm.response.code).to.eql(200);
});
測試響應(yīng)時間:
pm.test("請求響應(yīng)時間少于200ms", () => {
pm.expect(pm.response.responseTime).to.be.below(200);
});
組合斷言測試:測試腳本也可以包含多個斷言作為單個測試,可以將相關(guān)斷言組合在一起。如果包含的任一個斷言失敗,整個測試將失敗,所有斷言都必須成功,測試才能通過。
pm.test("The response has all properties", () => {
const responseJson = pm.response.json(); //將響應(yīng)體body轉(zhuǎn)換成JSON格式
pm.expect(responseJson.type).to.eql('vip'); // type等于vip
pm.expect(responseJson.name).to.be.a('string'); // name值的類型為string類型
pm.expect(responseJson.id).to.have.lengthof(1); // id的長度為1
}
控制臺日志
在測試腳本中遇到錯誤或意外行為時,Postman控制臺可以幫助你識別,通過將console.log調(diào)試語句與你的測試斷言相結(jié)合,你可以檢查http請求和響應(yīng)的內(nèi)容,以及變量之類的。
使用控制臺日志來標(biāo)記代碼執(zhí)行,也稱為“跟蹤語句”。
-
console.log()
:打印日志 -
console.info()
:打印日志信息 -
console.debug()
:打印Debug日志 -
console.error()
:打印錯誤日志 -
console.warn()
:打印警告信息
示例:
if(pm.response.json().data) {
console.log("數(shù)據(jù)不為空");
} else {
console.log("數(shù)據(jù)為空");
}
Postman控制臺在左下角的Console。
數(shù)據(jù)導(dǎo)入導(dǎo)出
這里的數(shù)據(jù)導(dǎo)入導(dǎo)出,包括Collection、Environment環(huán)境變量、Pre-request Script和Tests腳本。
鏈接或文件方式導(dǎo)入
- 點擊主頁標(biāo)題欄下的import按鈕。
- 選擇導(dǎo)入的方式,下圖所示三種方式。
Collection導(dǎo)出
- 選擇要導(dǎo)出的Collection,點擊右側(cè)三個點,選擇Export導(dǎo)出。
- 默認(rèn)選擇,直接導(dǎo)出JSON文件。
注意:如果Collection有Variable變量、Pre-request script和Tests腳本也會被導(dǎo)出。
Environments導(dǎo)出
- Globals導(dǎo)出,點擊Export按鈕,直接導(dǎo)出JSON文件。
- 新增的其他環(huán)境導(dǎo)出,點擊右側(cè)三個點,選擇Export,導(dǎo)出JSON文件。
導(dǎo)出本地Postman所有數(shù)據(jù)
- 打開設(shè)置
- 選擇Data -> Request Data Export。
- 會跳轉(zhuǎn)到網(wǎng)頁上,點擊Export Data按鈕。
- 默認(rèn)全選,選擇導(dǎo)出,會通過Email方式發(fā)送到你的賬號郵箱,訪問郵箱鏈接下載導(dǎo)出文件。
分享數(shù)據(jù)
除了Collection可以生成分享鏈接,其他的Folder、Request和Environment都只能分享給指定的用戶或者用戶郵箱,分享數(shù)據(jù)和導(dǎo)出數(shù)據(jù)一樣。
Collection分享:文章來源:http://www.zghlxwxcb.cn/news/detail-778941.html
- 選擇要分享的Collection,以下二種方式任意選一個。
- 選via api,點擊Generate New Key,最后復(fù)制完整鏈接給其他用戶,用戶通過該鏈接導(dǎo)入分享的Collection。
Request分享:文章來源地址http://www.zghlxwxcb.cn/news/detail-778941.html
- 選擇分享的Request,點擊右側(cè)三個點,選擇Share。
- 根據(jù)分享方式
注意:下面讓你選擇什么方式去合作,默認(rèn)選擇創(chuàng)建一個新的工作臺并移除當(dāng)前Collection給你的團(tuán)隊,另一個是分享你的工作臺給你的團(tuán)隊。
到了這里,關(guān)于Postman工具使用一篇快速入門教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!