用了這么多年的 Postman,竟然用錯(cuò)了~
真香!24W字的Java面試手冊(cè)(點(diǎn)擊查看)

基礎(chǔ)功能 常見(jiàn)類型的接口請(qǐng)求 接口響應(yīng)數(shù)據(jù)的解析 接口管理(Collection) 批量執(zhí)行接口請(qǐng)求 日志調(diào)試 斷言 變量 請(qǐng)求前置腳本 接口關(guān)聯(lián) 常見(jià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ù)庫(kù) apis
# postman安裝說(shuō)明




# 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.1Content-Type: multipart/form-datafile=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.1Content-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),一般來(lái)說(shuō)我們都會(huì)驗(yàn)證響應(yīng)體中的數(shù)據(jù)和響應(yīng)狀態(tài)碼 Test Results 是我們編寫斷言后,可以查看斷言的執(zhí)行結(jié)果 ,所以這個(gè)對(duì)我們也很有用 。 Time 和Size 是我們做性能測(cè)試時(shí),可以根據(jù)這兩個(gè)參數(shù)來(lái)對(duì)所測(cè)接口的性能做一個(gè)簡(jiǎn)單的判斷。


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







斷言統(tǒng)計(jì):左上角的兩個(gè)0是統(tǒng)計(jì)當(dāng)前Collection中斷言成功的執(zhí)行數(shù)和失敗的執(zhí)行數(shù),如果沒(méi)有編寫斷言默認(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)簽 斷言所用語(yǔ)言: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

全局變量:一旦申明了全局變量,全局有效,也就是說(shuō)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)境下的變量了 。需要說(shuō)明的是環(huán)境也可以創(chuàng)建多個(gè) 。每個(gè)環(huán)境下又可以有多個(gè)變量 。 集合變量:集合變量是針對(duì)集合的,也就是說(shuō)申明的變量必須基于某個(gè)集合,它的使用范圍也只是針對(duì)這個(gè)集合有效 。
定義變量(設(shè)置變量) 獲取變量(訪問(wèn)變量)




定義全局變量: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è)過(guò)程中,會(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的值,通過(guò).獲取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的值,通過(guò)下標(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的值,通過(guò)slice(-1)獲取列表中最后一個(gè)元素。var id = jsonData.data.rows.slice(-1)[0]
如有文章對(duì)你有幫助,
“在看”和轉(zhuǎn)發(fā)是對(duì)我最大的支持!
推薦, Java面試手冊(cè) 內(nèi)容包括網(wǎng)絡(luò)協(xié)議、Java基礎(chǔ)、進(jìn)階、字符串、集合、并發(fā)、JVM、數(shù)據(jù)結(jié)構(gòu)、算法、MySQL、Redis、Mongo、Spring、SpringBoot、MyBatis、SpringCloud、Linux以及各種中間件(Dubbo、Nginx、Zookeeper、MQ、Kafka、ElasticSearch)等等...
點(diǎn)擊文末“閱讀原文”可直達(dá)
評(píng)論
圖片
表情

