Postman 從入門到進(jìn)階教程!
在公眾號(hào)后臺(tái)回復(fù):JGNB,可獲取杰哥原創(chuàng)的 PDF 手冊(cè)。
來源:www.toutiao.com/i6913538714060800515
基礎(chǔ)功能
常見類型的接口請(qǐng)求 接口響應(yīng)數(shù)據(jù)的解析 接口管理(Collection) 批量執(zhí)行接口請(qǐng)求 日志調(diào)試 斷言 變量 請(qǐng)求前置腳本 接口關(guān)聯(lián) 常見的返回值獲取 便捷功能快
速填寫查詢參數(shù) 快速填寫請(qǐng)求頭信息 快速實(shí)現(xiàn)添加一個(gè)請(qǐng)求 如何繼承集合認(rèn)證 批量斷言 快速查詢和替換 高級(jí)功能
讀取文件進(jìn)行參數(shù)化 生成測(cè)試報(bào)告 代碼中發(fā)送請(qǐng)求 編寫接口文檔 mock服務(wù) 監(jiān)控 使用工作空間 代碼同步與分支管理 連接數(shù)據(jù)庫 apis
「一. postman安裝說明」
「二.postman基礎(chǔ)功能」
請(qǐng)求方法:POST
請(qǐng)求URL:
http://localhost/index.php?m=Home&c=User&a=do_login&t=0.21942974229794432
請(qǐng)求頭:Content-Type:application/x-www-form-urlencode
請(qǐng)求體:username=13088888888&password=123456&verify_code=8888
打開postman,新建一個(gè)請(qǐng)求 。 在請(qǐng)求中設(shè)置以上四個(gè)參數(shù),點(diǎn)擊Send按鈕。在postman中設(shè)置請(qǐng)求體類型為,需要「選擇body-> x-www-form-urlencoded」 查看響應(yīng)數(shù)據(jù)。
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
請(qǐng)求方法:POST
請(qǐng)求URL:
http://localhost/index.php/home/Uploadify/imageUp/savepath/head_pic/pictitle/banner/dir/images.html
請(qǐng)求類型:multipart/form-data
請(qǐng)求體:file=a1.jpg
打開postman,新建一個(gè)請(qǐng)求 。 在請(qǐng)求中設(shè)置以上四個(gè)參數(shù),點(diǎn)擊Send按鈕。注意:在postman中設(shè)置請(qǐng)求體類型,需要「選擇body-> form-data」 。file中要選擇File類型,然后上傳本地的文件 。 查看響應(yīng)數(shù)據(jù)。
POST http://xxx/api/sys/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
{"account":"root","password":"123456"}
請(qǐng)求方法:POST 請(qǐng)求地址:http://xxx/api/sys/login 請(qǐng)求體類型:json 請(qǐng)求體數(shù)據(jù):{"account":"root","password":"123456"}
打開postman,新建一個(gè)請(qǐng)求 。 在請(qǐng)求中設(shè)置以上四個(gè)參數(shù),點(diǎn)擊Send按鈕。注意:在postman中設(shè)置請(qǐng)求體類型,需要「選擇body-> raw -JSON」 查看響應(yīng)數(shù)據(jù)。
狀態(tài)行:Status:200 OK 響應(yīng)頭:Headers + Cookies,需要注意的是Cookies是包含在響應(yīng)頭中的,但是為了明顯,工具會(huì)分開顯示 響應(yīng)體:Body
Body和Status是我們做接口測(cè)試的重點(diǎn),一般來說我們都會(huì)驗(yàn)證響應(yīng)體中的數(shù)據(jù)和響應(yīng)狀態(tài)碼 Test Results 是我們編寫斷言后,可以查看斷言的執(zhí)行結(jié)果 ,所以這個(gè)對(duì)我們也很有用 。 Time 和Size 是我們做性能測(cè)試時(shí),可以根據(jù)這兩個(gè)參數(shù)來對(duì)所測(cè)接口的性能做一個(gè)簡(jiǎn)單的判斷。
用例分類管理,方便后期維護(hù) 可以進(jìn)行批量用例回歸測(cè)試 。
「斷言統(tǒng)計(jì)」:左上角的兩個(gè)0是統(tǒng)計(jì)當(dāng)前Collection中斷言成功的執(zhí)行數(shù)和失敗的執(zhí)行數(shù),如果沒有編寫斷言默認(rèn)都為0 。 Run Summary: 運(yùn)行結(jié)果總覽,點(diǎn)擊它可以看到每個(gè)請(qǐng)求中具體的測(cè)試斷言詳細(xì)信息 。Export Result:導(dǎo)出運(yùn)行結(jié)果,默認(rèn)導(dǎo)出的結(jié)果json文件 。 Retry: 重新運(yùn)行,點(diǎn)擊它會(huì)把該Collection重新運(yùn)行一遍 New:返回到Runner,可以重新選擇用例的組合 。



搜索日志:輸入U(xiǎn)RL或者打印的日志就能直接搜索出我們想要的請(qǐng)求和日志,這對(duì)我們?cè)诒姸嗳罩局胁檎夷骋粭l日志是非常方便的 。 按級(jí)別搜索:可以查詢log,info,warning,error級(jí)別的日志 ,有助于我們更快定位到錯(cuò)誤 。 查看原始報(bào)文(Show raw log):如果習(xí)慣看原始請(qǐng)求報(bào)文的話,這個(gè)功能可能更方便些 。 隱藏請(qǐng)求(Hide network):把請(qǐng)求都隱藏掉,只查看輸出日志 。
斷言編寫位置:Tests標(biāo)簽 斷言所用語言:JavaScript 斷言執(zhí)行順序:在響應(yīng)體數(shù)據(jù)返回后執(zhí)行 。 斷言執(zhí)行結(jié)果查看:Test Results

斷言狀態(tài)碼:「Status code: code is 200」
pm.test("Status code is 200", function () {
pm.response.to.have.status(200); //這里填寫的200是預(yù)期結(jié)果,實(shí)際結(jié)果是請(qǐng)求返回結(jié)果
});
斷言狀態(tài)消息:「Status code:code name has string」
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK"); //斷言響應(yīng)狀態(tài)消息包含OK
});
斷言響應(yīng)頭中包含:Response headers:Content-Type header check
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type"); //斷言響應(yīng)頭存在"Content-Type"
});
斷言響應(yīng)體中包含XXX字符串:Response body:Contains string
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") 獲取響應(yīng)文本中包含string
斷言響應(yīng)體等于XXX字符串:Response body : is equal to a string
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//注解
pm.response.to.have.body("response_body_string"); 獲取響應(yīng)體等于response_body_string
斷言響應(yīng)體(json)中某個(gè)鍵名對(duì)應(yīng)的值:Response body : JSON value check
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
//注解
var jsonData = pm.response.json() 獲取響應(yīng)體,以json顯示,賦值給jsonData .注意:該響應(yīng)體必須返會(huì)是的json,否則會(huì)報(bào)錯(cuò)
pm.expect(jsonData.value).to.eql(100) 獲取jsonData中鍵名為value的值,然后和100進(jìn)行比較
斷言響應(yīng)時(shí)間:Response time is less than 200ms
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200); //斷言響應(yīng)時(shí)間<200ms
});
{
"cityid": "101120101",
"city": "濟(jì)南",
"update_time": "2020-04-17 10:50",
"wea": "晴",
"wea_img": "qing",
"tem": "16",
"tem_day": "20",
"tem_night": "9",
"win": "東北風(fēng)",
"win_speed": "3級(jí)",
"win_meter": "小于12km/h",
"air": "113"
}
斷言響應(yīng)狀態(tài)碼為200 斷言city等于濟(jì)南 斷言u(píng)pdate_time包含2020-04-17

「全局變量」:一旦申明了全局變量,全局有效,也就是說postman中的任何集合,任何請(qǐng)求中都可以使用這個(gè)變量。它的作用域是最大的 。 「環(huán)境變量」:要申明環(huán)境變量,首先的創(chuàng)建環(huán)境,然后在環(huán)境中才能創(chuàng)建變量 。如果要想使用環(huán)境變量,必須先選擇(導(dǎo)入)這個(gè)環(huán)境,這樣就可以使用這個(gè)環(huán)境下的變量了 。需要說明的是環(huán)境也可以創(chuàng)建多個(gè) 。每個(gè)環(huán)境下又可以有多個(gè)變量 。 「集合變量」:集合變量是針對(duì)集合的,也就是說申明的變量必須基于某個(gè)集合,它的使用范圍也只是針對(duì)這個(gè)集合有效 。
定義變量(設(shè)置變量) 獲取變量(訪問變量)




定義全局變量:pm.collectionVariables.set("變量名",變量值) 定義環(huán)境變量:pm.environment.set("變量名",變量值) 定義集合變量:pm.variables.set("變量名",變量值)
請(qǐng)求參數(shù)指的是:URL,Params , Authorization , Headers , Body
獲取環(huán)境變量:pm.environment.get(‘變量名’) 獲取全局變量:pm.globals.get('變量名') 獲取集合變量:pm.pm.collectionVariables.get.get('變量名')

請(qǐng)求的登錄接口URL,參數(shù)t的值要求的規(guī)則是每次請(qǐng)求都必須是一個(gè)隨機(jī)數(shù)。
接口地址:
http://localhost/index.php?m=Home&c=User&a=do_login&t=0.7102045930338428

在前置腳本中編寫生成隨機(jī)數(shù) 將這個(gè)值保存成環(huán)境變量 將參數(shù)t的值替換成環(huán)境變量的值 。

提取上一個(gè)接口的返回?cái)?shù)據(jù)值, 將這個(gè)數(shù)據(jù)值保存到環(huán)境變量或全局變量中 在下一個(gè)接口獲取環(huán)境變量或全局變量
用戶上傳頭像功能,需要用戶先上傳一張圖片,然后會(huì)自動(dòng)預(yù)覽 。那么在這個(gè)過程中,會(huì)調(diào)用到倆個(gè)接口 ,第一個(gè)上傳頭像接口,第二個(gè)預(yù)覽圖像接口 。 其中調(diào)用上傳頭像接口成功后會(huì)返回如下信息:
{
"url": "/public/upload/user//head_pic//ba51d1c2f7f7b98dfb5cad90846e2d79.jpg",
"title": "banner",
"original": "",
"state": "SUCCESS",
"path": "images"
}
獲取上傳頭像接口返回url的值 將這個(gè)值保存成全局變量(環(huán)境變量也可以) 在圖像預(yù)覽中使用全局變量

{
"code": 0,
"message": "請(qǐng)求成功!",
"data": {
"user_id": "1252163151781167104"
}
}
//獲取json體數(shù)據(jù)
var jsonData = pm.response.json()
// 獲取user_id的值,通過.獲取
var user_id = jsonData.data.user_id
{
"code": 0,
"message": "請(qǐng)求成功!",
"data": {
"roles": {
"api": [
"API-USER-DELETE"
],
"points": [
"point-user-delete",
"POINT-USER-UPDATE",
"POINT-USER-ADD"
]
},
"authCache": null
}
}
//獲取json體數(shù)據(jù)
var jsonData = pm.response.json()
// 獲取user_id的值,通過下標(biāo)獲取列表中某個(gè)元素
var user_id = jsonData.data.roles.points[1]
{
"code": 0,
"message": "請(qǐng)求成功!",
"data": {
"total": 24,
"rows": [
{
"id": "1066370498633486336",
"mobile": "15812340003",
"username": "zbz"
},
{
"id": "1071632760222810112",
"mobile": "16612094236",
"username": "llx"
},
...
{
"id": "1075383133106425856",
"mobile": "13523679872",
"username": "test001",
},
//獲取json體數(shù)據(jù)
var jsonData = pm.response.json()
// 獲取id的值,通過slice(-1)獲取列表中最后一個(gè)元素。
var id = jsonData.data.rows.slice(-1)[0]
推薦閱讀:
中國(guó)各地高考難度地圖:上大學(xué)最難的省份是哪里!?
數(shù)據(jù)在網(wǎng)絡(luò)中是如何傳輸?shù)?/span>

評(píng)論
圖片
表情
