用了這么多年的 Postman,竟然用錯(cuò)了~
點(diǎn)擊上方“程序員大白”,選擇“星標(biāo)”公眾號
重磅干貨,第一時(shí)間送達(dá)

來源:https://www.toutiao.com/i6913538714060800515/

基礎(chǔ)功能 常見類型的接口請求 接口響應(yīng)數(shù)據(jù)的解析 接口管理(Collection) 批量執(zhí)行接口請求 日志調(diào)試 斷言 變量 請求前置腳本 接口關(guān)聯(lián) 常見的返回值獲取 便捷功能快 速填寫查詢參數(shù) 快速填寫請求頭信息 快速實(shí)現(xiàn)添加一個(gè)請求 如何繼承集合認(rèn)證 批量斷言 快速查詢和替換 高級功能 讀取文件進(jìn)行參數(shù)化 生成測試報(bào)告 代碼中發(fā)送請求 編寫接口文檔 mock服務(wù) 監(jiān)控 使用工作空間 代碼同步與分支管理 連接數(shù)據(jù)庫 apis
# postman安裝說明




# postman基礎(chǔ)功能


請求方法:POST 請求URL: http://localhost/index.php?m=Home&c=User&a=do_login&t=0.21942974229794432 請求頭:Content-Type:application/x-www-form-urlencode 請求體:username=13088888888&password=123456&verify_code=8888
打開postman,新建一個(gè)請求 。 在請求中設(shè)置以上四個(gè)參數(shù),點(diǎn)擊Send按鈕。在postman中設(shè)置請求體類型為,需要選擇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.1Content-Type: multipart/form-datafile=a1.jpg
請求方法:POST 請求URL: http://localhost/index.php/home/Uploadify/imageUp/savepath/head_pic/pictitle/banner/dir/images.html 請求類型:multipart/form-data 請求體:file=a1.jpg
打開postman,新建一個(gè)請求 。 在請求中設(shè)置以上四個(gè)參數(shù),點(diǎn)擊Send按鈕。注意:在postman中設(shè)置請求體類型,需要選擇body-> form-data 。file中要選擇File類型,然后上傳本地的文件 。 查看響應(yīng)數(shù)據(jù)。

POST http://xxx/api/sys/login HTTP/1.1Content-Type: application/json;charset=UTF-8{"account":"root","password":"123456"}
請求方法:POST 請求地址:http://xxx/api/sys/login 請求體類型:json 請求體數(shù)據(jù):{"account":"root","password":"123456"}
打開postman,新建一個(gè)請求 。 在請求中設(shè)置以上四個(gè)參數(shù),點(diǎn)擊Send按鈕。注意:在postman中設(shè)置請求體類型,需要選擇body-> raw -JSON 查看響應(yīng)數(shù)據(jù)。


狀態(tài)行:Status:200 OK 響應(yīng)頭:Headers + Cookies,需要注意的是Cookies是包含在響應(yīng)頭中的,但是為了明顯,工具會分開顯示 響應(yīng)體:Body
Body和Status是我們做接口測試的重點(diǎn),一般來說我們都會驗(yàn)證響應(yīng)體中的數(shù)據(jù)和響應(yīng)狀態(tài)碼 Test Results 是我們編寫斷言后,可以查看斷言的執(zhí)行結(jié)果 ,所以這個(gè)對我們也很有用 。 Time 和Size 是我們做性能測試時(shí),可以根據(jù)這兩個(gè)參數(shù)來對所測接口的性能做一個(gè)簡單的判斷。


用例分類管理,方便后期維護(hù) 可以進(jìn)行批量用例回歸測試 。







斷言統(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è)請求中具體的測試斷言詳細(xì)信息 。Export Result:導(dǎo)出運(yùn)行結(jié)果,默認(rèn)導(dǎo)出的結(jié)果json文件 。 Retry: 重新運(yùn)行,點(diǎn)擊它會把該Collection重新運(yùn)行一遍 New:返回到Runner,可以重新選擇用例的組合 。



搜索日志:輸入U(xiǎn)RL或者打印的日志就能直接搜索出我們想要的請求和日志,這對我們在眾多日志中查找某一條日志是非常方便的 。 按級別搜索:可以查詢log,info,warning,error級別的日志 ,有助于我們更快定位到錯(cuò)誤 。 查看原始報(bào)文(Show raw log):如果習(xí)慣看原始請求報(bào)文的話,這個(gè)功能可能更方便些 。 隱藏請求(Hide network):把請求都隱藏掉,只查看輸出日志 。
斷言編寫位置: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é)果是請求返回結(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è)鍵名對應(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)體必須返會是的json,否則會報(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級","win_meter": "小于12km/h","air": "113"}
斷言響應(yīng)狀態(tài)碼為200 斷言city等于濟(jì)南 斷言update_time包含2020-04-17

全局變量:一旦申明了全局變量,全局有效,也就是說postman中的任何集合,任何請求中都可以使用這個(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è)變量 。 集合變量:集合變量是針對集合的,也就是說申明的變量必須基于某個(gè)集合,它的使用范圍也只是針對這個(gè)集合有效 。
定義變量(設(shè)置變量) 獲取變量(訪問變量)




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

請求的登錄接口URL,參數(shù)t的值要求的規(guī)則是每次請求都必須是一個(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)境變量或全局變量
用戶上傳頭像功能,需要用戶先上傳一張圖片,然后會自動(dòng)預(yù)覽 。那么在這個(gè)過程中,會調(diào)用到倆個(gè)接口 ,第一個(gè)上傳頭像接口,第二個(gè)預(yù)覽圖像接口 。 其中調(diào)用上傳頭像接口成功后會返回如下信息:
{"url": "/public/upload/user//head_pic//ba51d1c2f7f7b98dfb5cad90846e2d79.jpg","title": "banner","original": "","state": "SUCCESS","path": "images"}
獲取上傳頭像接口返回url的值 將這個(gè)值保存成全局變量(環(huán)境變量也可以) 在圖像預(yù)覽中使用全局變量

{"code": 0,"message": "請求成功!","data": {"user_id": "1252163151781167104"}}
//獲取json體數(shù)據(jù)var jsonData = pm.response.json()// 獲取user_id的值,通過.獲取var user_id = jsonData.data.user_id
{"code": 0,"message": "請求成功!","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": "請求成功!","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]
評論
圖片
表情

