試新手入門指南:從裝好到集合管理)
如果你最近在學(xué)接口測試或者只是想讓前后端聯(lián)調(diào)時(shí)少拉幾個(gè)群問“這個(gè)接口到底通沒通”那你多半會(huì)搜到 Postman。作為一個(gè)用了很多年、也帶過不少新人的老用戶我特別理解新手第一次打開它時(shí)的陌生感左邊是集合中間是請求編輯區(qū)右邊還有一堆不知道干什么用的面板。這篇文章就按新手實(shí)際會(huì)遇到的順序來講不堆術(shù)語不講底層協(xié)議只講你會(huì)真正用到的部分下載安裝、發(fā)第一個(gè)請求、建集合、配環(huán)境變量、寫簡單斷言、處理常見報(bào)錯(cuò)。看完你至少能獨(dú)立把一個(gè)接口從填參數(shù)調(diào)通再整理成可以分享給同事的集合。1. Postman 到底解決了什么問題一個(gè)接口調(diào)試?yán)鲜值睦斫?.1 先理解“接口”是什么很多新手看到“接口”兩個(gè)字就犯怵其實(shí)你完全可以把它想象成點(diǎn)菜。你作為客戶端向服務(wù)員說出你的需求服務(wù)員把訂單送到后廚后廚做好了菜再讓服務(wù)員端回來給你。這里的“點(diǎn)菜需求”就是 HTTP 請求“后端返回的數(shù)據(jù)”就是 HTTP 響應(yīng)而 Postman 就是那個(gè)幫你寫訂單、傳訂單、再把菜端回來給你看的傳菜員。你不需要會(huì)“做飯”也不需要天天到后廚盯著只要把訂單寫清楚就能看到后廚到底出沒出菜。接口測試說到底就是驗(yàn)證一件事當(dāng)我按某個(gè)規(guī)則發(fā)送請求時(shí)服務(wù)端會(huì)不會(huì)按預(yù)期的規(guī)則返回。Postman 把這個(gè)過程做成了圖形界面讓任何人都能不用敲命令行就完成一次完整的請求和響應(yīng)查看。它適合的也不只是測試工程師前端可以拿它調(diào)試自己對接的接口后端可以拿它驗(yàn)證自己寫的路由運(yùn)維可以拿它快速檢查服務(wù)是否存活。1.2 Postman 能做的不只是“發(fā)請求”新手容易把 Postman 理解成一個(gè)“發(fā)請求的工具”這個(gè)理解沒錯(cuò)但太窄了。等你用一段時(shí)間就會(huì)發(fā)現(xiàn)它真正解決的是“接口調(diào)試和接口資產(chǎn)管理”這一整條鏈路的問題。舉幾個(gè)最常用的場景你可以把同一個(gè)接口的幾十種參數(shù)組合都保存下來下次直接選你可以把登錄接口返回的 token 自動(dòng)存到變量里后面的請求自動(dòng)帶上你可以給每個(gè)接口寫斷言跑一遍集合就知道哪些功能回歸掛了你還可以把整個(gè)集合導(dǎo)出成文件發(fā)給同事或者在團(tuán)隊(duì)工作區(qū)里共享。所以對新手來說一開始就建立“集合、環(huán)境、測試腳本”這三個(gè)概念比單純學(xué)會(huì)按 Send 鍵重要得多。1.3 新手不用糾結(jié)“用 Postman 還是用 curl”我經(jīng)常看到有人爭論P(yáng)ostman 太笨重直接用 curl 多清爽。這話有一定道理但不太適合剛?cè)腴T的人。curl 確實(shí)輕適合在腳本里一行命令完成請求可如果你需要頻繁修改參數(shù)、查看歷史請求、保存多組環(huán)境配置命令行會(huì)很快讓你失去耐心。Postman 的底層也是發(fā) HTTP 請求和 curl 干的是同一件事只是它把過程拆成了你能看見、能點(diǎn)擊、能保存的界面。新手先通過 Postman 理解清楚 HTTP 請求的結(jié)構(gòu)以后再去寫腳本調(diào)用 curl反而是更順的路。2. 從裝好到發(fā)出第一個(gè)請求把 Hello World 跑起來2.1 該裝桌面版還是 Web 版現(xiàn)在打開 Postman 官網(wǎng)默認(rèn)會(huì)引導(dǎo)你下載桌面客戶端。我建議新手直接裝桌面版原因很實(shí)際桌面版可以離線查看歷史記錄可以讀取本地文件某些代理和證書配置也更方便。Web 版雖然有但它更像是一個(gè)“臨時(shí)體驗(yàn)”的入口真正做項(xiàng)目調(diào)試時(shí)你大概率還是需要桌面端。安裝之后第一次啟動(dòng)Postman 會(huì)提示你登錄賬號(hào)或者創(chuàng)建賬號(hào)。我的建議是注冊一個(gè)賬號(hào)登錄因?yàn)榧虾铜h(huán)境中很多數(shù)據(jù)可以保存到云端換電腦時(shí)能直接同步回來。如果你所在的團(tuán)隊(duì)對數(shù)據(jù)安全要求比較高也可以先用訪客模式操作只是要注意數(shù)據(jù)只存在本地別隨便清理瀏覽器緩存或卸載軟件。2.2 主界面其實(shí)只有四個(gè)區(qū)域第一次打開 Postman你可能被滿屏的按鈕嚇到但拆開來看就四個(gè)區(qū)域最左邊是功能導(dǎo)航和集合列表中間是請求編輯區(qū)包含請求方法、URL 地址和各選項(xiàng)卡右邊是發(fā)送按鈕和響應(yīng)區(qū)最上方是環(huán)境選擇和搜索欄。新手只需要先在“請求編輯區(qū)”找到 URL 輸入框和 Send 按鈕其他功能都可以慢慢熟悉。我見過太多人一上來就試圖搞懂所有按鈕結(jié)果半小時(shí)后放棄了。正確做法是先不管別的把一個(gè)請求發(fā)出去再逐步增加需求。比如先發(fā)一個(gè)最簡單的 GET 請求看到響應(yīng)之后再試試 POST 帶 JSON 數(shù)據(jù)慢慢就會(huì)對界面產(chǎn)生感覺。2.3 發(fā)一個(gè)最簡單的 GET 請求我現(xiàn)在演示的請求地址是http://127.0.0.1:3000/api/users這個(gè)地址在實(shí)際項(xiàng)目中通常對應(yīng)你本地啟動(dòng)的后端服務(wù)或者你們團(tuán)隊(duì)提供的測試環(huán)境地址。新手不用糾結(jié)這個(gè)地址能不能打開你只需要跟著操作理解流程。第一步把請求方法從默認(rèn)的 GET 保持住第二步在 URL 輸入框填入接口地址第三步點(diǎn)擊右邊的 Send 按鈕。如果服務(wù)正常你會(huì)看到下方響應(yīng)區(qū)返回一段 JSON比如用戶列表數(shù)據(jù)。這一步看起來簡單但它其實(shí)完成了一次完整的 HTTP 通信請求從 Postman 發(fā)出服務(wù)器處理并返回響應(yīng)Postman 再把響應(yīng)解析給你看。2.4 響應(yīng)區(qū)里先看這三個(gè)地方響應(yīng)區(qū)最上面會(huì)顯示狀態(tài)碼、請求耗時(shí)和返回體大小。狀態(tài)碼尤其重要200 表示請求被正常處理404 表示路徑不存在500 表示服務(wù)器內(nèi)部出錯(cuò)。新手先記住“2xx 是成功4xx 是請求的問題5xx 是服務(wù)器的問題”這個(gè)大分類后面的細(xì)枝末節(jié)踩坑時(shí)再學(xué)。第二個(gè)要看的是 Body 里的內(nèi)容。如果接口返回的是 JSONPostman 會(huì)把 JSON 里的字段高亮顯示并且支持折疊展開方便你一層一層看數(shù)據(jù)結(jié)構(gòu)。第三個(gè)是響應(yīng)區(qū)里的 Headers 標(biāo)簽頁里面會(huì)展示 Content-Type、Set-Cookie、Cache-Control 等響應(yīng)頭信息。這些信息新手可以先不了解但當(dāng)你遇到“為什么前端拿不到數(shù)據(jù)”這類問題時(shí)返回頭里的 Content-Type 往往能告訴你答案。3. 集合 Collection從“臨時(shí)請求”變成“接口資產(chǎn)”3.1 為什么一定要把請求保存下來很多新手犯的第一個(gè)錯(cuò)誤是在 Postman 里臨時(shí)輸入一個(gè) URL調(diào)試完就關(guān)掉了。下次再想測同一個(gè)接口只能重新翻聊天記錄、找接口文檔甚至問同事“這個(gè)接口地址是多少”。Postman 里的 History 雖然會(huì)記錄你發(fā)過的請求但它只適合短期回顧不適合當(dāng)正式資產(chǎn)來管理。集合的意義就是給你的接口請求提供一個(gè)長期的家。你可以為每個(gè)項(xiàng)目建一個(gè)集合再在里面按模塊建文件夾。發(fā)送過的請求只要命名清楚、保存好以后想重新調(diào)一遍的時(shí)候點(diǎn)開就能用不需要重新填參數(shù)。這個(gè)習(xí)慣從一開始就培養(yǎng)起來后面能節(jié)省大量時(shí)間。3.2 新建集合和文件夾的具體操作在左側(cè)欄點(diǎn)擊 Collections 標(biāo)簽再點(diǎn)新建按鈕輸入集合名稱比如“商城用戶端”。右鍵這個(gè)集合點(diǎn)擊 Add Folder可以創(chuàng)建“用戶模塊”“訂單模塊”“商品模塊”這類子文件夾。然后在某個(gè)文件夾里點(diǎn)擊 Add Request填寫請求名稱再填入方法、URL、參數(shù)、請求體最后保存。這里有個(gè)小技巧保存請求時(shí)名稱最好能表達(dá)“操作意圖”例如“獲取用戶列表”“登錄并獲取 token”“更新用戶頭像”而不是只寫“接口1”“測試2”。別小看命名一個(gè)集合里有幾十個(gè)請求以后名稱混亂會(huì)直接拖慢你和同事的工作效率。3.3 集合的導(dǎo)出和導(dǎo)入Postman 的集合本質(zhì)上是一個(gè) JSON 文件。當(dāng)你需要把接口信息交給同事或者在另一臺(tái)電腦上使用同一個(gè)項(xiàng)目時(shí)可以右鍵集合選擇 Export會(huì)導(dǎo)出一個(gè) JSON 文件同事拿到后點(diǎn)擊 Import選擇這個(gè)文件就能得到一模一樣的集合。這個(gè)功能也特別適合沒開通團(tuán)隊(duì)共享的場景。很多小團(tuán)隊(duì)沒有專門的后端管理平臺(tái)接口文檔也經(jīng)常更新不及時(shí)那不如直接把集合文件作為“活文檔”來維護(hù)。后端改完接口更新集合導(dǎo)出一次前端拿到新文件就知道該傳什么參數(shù)、會(huì)返回什么結(jié)構(gòu)比反復(fù)截圖聊天高效得多。3.4 用 Example 記錄一次成功的響應(yīng)集合里還有一個(gè)容易被新手忽略的功能叫 Example。你可以把一次成功的請求響應(yīng)保存成示例相當(dāng)于給接口拍了一張“標(biāo)準(zhǔn)照片”。當(dāng)同事打開這個(gè)請求時(shí)除了能看到請求參數(shù)還能直接看到預(yù)期返回是什么樣的不需要再去數(shù)據(jù)庫里翻。具體操作是在某個(gè)請求中發(fā)送成功后點(diǎn)擊請求名稱旁邊的下拉箭頭選擇 Add ExamplePostman 會(huì)自動(dòng)保存當(dāng)前響應(yīng)作為示例。以后接口一改你可以再更新這個(gè)示例讓它在團(tuán)隊(duì)里起到文檔的作用。前端聯(lián)調(diào)時(shí)尤其喜歡這個(gè)功能因?yàn)椴挥脝?dòng)后端也能看到數(shù)據(jù)結(jié)構(gòu)長什么樣。4. 環(huán)境變量和全局變量一套集合應(yīng)對三個(gè)環(huán)境4.1 沒有變量時(shí)你會(huì)在多環(huán)境之間反復(fù)“改 URL”剛開始用 Postman你可能是直接在每個(gè)請求的 URL 里寫死地址比如http://127.0.0.1:3000/api/users。等你有了一套測試環(huán)境例如http://test-server.example.com/api/users你發(fā)現(xiàn)每個(gè)請求都要改一遍域名前綴改完生產(chǎn)環(huán)境又改一遍特別容易漏。變量機(jī)制就是為了解決這個(gè)問題的。Postman 允許你把 URL 中可變的部分抽出來寫成一個(gè)變量比如{{baseUrl}}然后在不同的“環(huán)境”里給這個(gè)變量配不同的值。請求代碼里永遠(yuǎn)寫{{baseUrl}}/api/users不需要改。切換環(huán)境時(shí)只需要改右上角環(huán)境下拉框所有請求的域名就一起變了。4.2 變量縮寫、作用域和優(yōu)先級(jí)Postman 里的變量寫法是一對雙花括號(hào)例如{{token}}、{{baseUrl}}。變量一般分三類全局變量全局生效所有集合和請求都能用環(huán)境變量只在當(dāng)前選中的環(huán)境里生效適合保存“開發(fā)環(huán)境地址”“測試環(huán)境地址”這類與環(huán)境相關(guān)的內(nèi)容局部變量在腳本運(yùn)行過程中臨時(shí)存在比如一次性生成的隨機(jī)數(shù)。取值順序是局部變量優(yōu)先找不到再找環(huán)境變量再找不到就找全局變量。新手不用死記只需要記住一個(gè)原則環(huán)境相關(guān)的配置放環(huán)境變量人人相同的配置才放全局變量。這樣切環(huán)境時(shí)才不會(huì)出現(xiàn)“測試環(huán)境的賬號(hào)密碼跑到生產(chǎn)環(huán)境請求里”這種烏龍。4.3 實(shí)操創(chuàng)建一個(gè)“本地開發(fā)”環(huán)境點(diǎn)擊右上角環(huán)境選擇下拉框中的 Manage Environments進(jìn)入環(huán)境管理頁面。點(diǎn)擊 Add 新建一個(gè)環(huán)境命名為“本地開發(fā)”然后添加變量。先添加一個(gè)baseUrl初始值填http://127.0.0.1:3000當(dāng)前值同樣填這個(gè)地址。再添加一個(gè)token初始值可以留空當(dāng)前值也留空。保存之后在請求的 URL 里把原來的域名部分替換成{{baseUrl}}也就是{{baseUrl}}/api/users。然后回到右上角把當(dāng)前環(huán)境選成“本地開發(fā)”。點(diǎn)擊 SendPostman 會(huì)自動(dòng)把{{baseUrl}}替換成環(huán)境里的地址。以后要切到測試環(huán)境就再新建一個(gè)環(huán)境把baseUrl改成測試地址切換下拉框即可。4.4 用腳本把登錄 token 自動(dòng)存進(jìn)變量絕大多數(shù)系統(tǒng)都需要登錄后才能訪問業(yè)務(wù)接口。新手常見的做法是把登錄返回的 token 復(fù)制出來手動(dòng)粘貼到每個(gè)請求的 Headers 里。這樣做不僅麻煩而且 token 過期之后又要重新復(fù)制。解決辦法是在登錄請求的 Tests 標(biāo)簽頁里寫一小段腳本。假設(shè)登錄接口返回的 JSON 結(jié)構(gòu)是{data: {token: xxx}}腳本就寫成const json pm.response.json(); pm.environment.set(token, json.data.token);保存并發(fā)送登錄請求后再回到環(huán)境管理頁面你會(huì)發(fā)現(xiàn)“本地開發(fā)”環(huán)境里的token當(dāng)前值已經(jīng)被自動(dòng)填上了。然后業(yè)務(wù)請求的 Headers 里添加一個(gè)鍵叫Authorization值寫B(tài)earer {{token}}之后所有請求都會(huì)自動(dòng)帶上最新的 token不需要手動(dòng)干預(yù)。5. 請求里的四個(gè)核心位置Params、Headers、Body、Authorization5.1 ParamsQuery 參數(shù)和自動(dòng)編碼GET 請求常用的一類參數(shù)叫 Query 參數(shù)就是 URL 問號(hào)后面的keyvalue部分。如果接口地址是{{baseUrl}}/api/users?page1size20在 Postman 里你不需要把這一整串都寫在 URL 上。你可以在 Params 標(biāo)簽頁里把 key 填page、value 填1再增加一行 key 填size、value 填20Postman 會(huì)自動(dòng)幫你把參數(shù)拼到 URL 后面。這里有一個(gè)很實(shí)用的細(xì)節(jié)當(dāng)參數(shù)值里包含中文、空格、特殊字符時(shí)Postman 會(huì)自動(dòng)做 URL 編碼。比如一個(gè)搜索關(guān)鍵詞是“蘋果 手機(jī)”它可能被編碼成%E8%8B%B9%E6%9E%9C%20%E6%89%8B%E6%9C%BA。這是 HTTP 的規(guī)則不是報(bào)錯(cuò)。你直接在 Params 表格里填可讀內(nèi)容剩下交給 Postman 處理就行。5.2 Headers哪些需要手動(dòng)加Headers 標(biāo)簽頁用來添加 HTTP 請求頭。對于新手來說不需要手動(dòng)加 Host、Content-Length、Accept-Encoding 這些基礎(chǔ)頭Postman 會(huì)幫你自動(dòng)生成。最常見的兩個(gè)手動(dòng)頭部是Content-Type: application/json和Authorization: Bearer {{token}}。Content-Type告訴服務(wù)器請求體里的數(shù)據(jù)是什么格式。如果你用 raw 方式發(fā)送 JSON但沒有把Content-Type設(shè)置成application/json很多后端框架會(huì)直接拒絕解析。Authorization則用于身份驗(yàn)證在上一節(jié)我們已經(jīng)把 token 存進(jìn)環(huán)境變量這里只要寫B(tài)earer {{token}}就能自動(dòng)帶上。5.3 Body四種格式別選錯(cuò)POST、PUT 這類攜帶數(shù)據(jù)的請求需要用到 Body 標(biāo)簽頁。Postman 的 Body 有幾種常用格式新手一定要分清form-data支持表單字段和文件上傳適合提交文件比如上傳頭像。x-www-form-urlencoded普通表單提交適合注冊、登錄這類簡單表單。raw發(fā)送原始文本最常用于 JSON 數(shù)據(jù)。選這項(xiàng)時(shí)旁邊的下拉框一定要選擇JSON而不是Text。binary直接上傳一個(gè)二進(jìn)制文件。我見過最典型的新手報(bào)錯(cuò)是在 raw 里寫了一段 JSON但下拉框選的還是默認(rèn) Text導(dǎo)致后端收到的Content-Type是text/plain。服務(wù)端一判斷格式不對就返回 415 或者參數(shù)解析失敗。所以用 raw 時(shí)養(yǎng)成好習(xí)慣寫完 JSON順手確認(rèn)一下右上角選的是JSON。5.4 Authorization有些鑒權(quán)不需要手寫 HeadersPostman 的 Authorization 標(biāo)簽頁專門用來配置鑒權(quán)方式適合不想手動(dòng)拼 Header 的情況。比如接口需要 Bearer Token你可以在 Type 下拉框選 Bearer Token然后在 Token 輸入框填{{token}}。這個(gè)方式本質(zhì)上和手動(dòng)在 Headers 里加Authorization是一樣的但更直觀、更容易維護(hù)。如果接口用的是 HTTP Basic Auth也可以在 Type 里選 Basic Auth填用戶名和密碼Postman 會(huì)自動(dòng)生成對應(yīng)的 Authorization 頭。新手不用把每種鑒權(quán)協(xié)議都搞明白先掌握 Bearer Token 和 Basic Auth 這兩種最常見的后面遇到 OAuth 2.0 再按官方文檔配置即可。6. 斷言 Tests 和集合運(yùn)行別再用肉眼檢查接口6.1 為什么請求返回 200 不代表接口沒問題很多新手判斷接口通沒通的標(biāo)準(zhǔn)就是狀態(tài)碼是不是 200。但實(shí)際開發(fā)里有些后端會(huì)返回200同時(shí) JSON 里的業(yè)務(wù)碼卻是5001代表“未登錄”或者“庫存不足”。如果只看狀態(tài)碼你會(huì)誤以為接口沒問題聯(lián)調(diào)時(shí)浪費(fèi)大量時(shí)間。斷言就是在響應(yīng)返回后用腳本自動(dòng)檢查“響應(yīng)是否符合預(yù)期”。它就像一個(gè)考試判卷機(jī)而不是把卷子甩給你讓你自己讀。新手哪怕只寫兩三條斷言也會(huì)明顯減少“肉眼比對數(shù)據(jù)結(jié)構(gòu)”的工作量。6.2 寫你的第一段 Tests 腳本在請求的 Tests 標(biāo)簽頁里Postman 提供了一系列代碼片段Snippets你可以點(diǎn)選后自動(dòng)生成也可以直接手寫。我現(xiàn)在貼一段最常用的pm.test(狀態(tài)碼是200, () { pm.response.to.have.status(200); }); pm.test(返回?cái)?shù)據(jù)包含業(yè)務(wù)成功標(biāo)志, () { const json pm.response.json(); pm.expect(json.code).to.equal(0); }); pm.test(用戶列表不為空, () { const json pm.response.json(); pm.expect(json.data.items.length).to.be.at.least(1); });這段腳本做了三件事檢查 HTTP 狀態(tài)碼是 200檢查返回 JSON 里的業(yè)務(wù)碼code等于 0檢查data.items數(shù)組里至少有一條數(shù)據(jù)。點(diǎn)擊 Send 后響應(yīng)區(qū)會(huì)顯示測試結(jié)果勾選的就是通過的斷言紅叉的就是失敗的斷言。失敗時(shí)你能一眼看到到底哪個(gè)條件沒滿足。6.3 新手最容易上手的幾條斷言不用一上來就背 API 文檔Postman 的 Snippets 面板里有現(xiàn)成模板。我把實(shí)際項(xiàng)目里最高頻的四類列出來狀態(tài)碼檢查pm.response.to.have.status(200)。JSON 字段檢查獲取響應(yīng)體后用pm.expect(json.xxx).to.equal(預(yù)期值)。響應(yīng)時(shí)間檢查pm.expect(pm.response.responseTime).to.be.below(1000)。Header 檢查pm.response.to.have.header(Content-Type)。寫斷言最好的時(shí)機(jī)是“接口已經(jīng)調(diào)通的那一次”。你等接口正常返回再根據(jù)返回結(jié)果寫斷言這樣斷言就是“驗(yàn)收標(biāo)準(zhǔn)”以后接口改了導(dǎo)致返回結(jié)構(gòu)變化Postman 會(huì)自動(dòng)告訴你不用等人反饋才發(fā)現(xiàn)。6.4 用 Collection Runner 一口氣跑完所有接口單個(gè)接口調(diào)試通過還不夠你更希望的是“所有接口一起測一遍有沒有掛”。Postman 左側(cè)或頂部的 Runner 入口就是干這個(gè)用的。點(diǎn)擊 Collection Runner選擇要運(yùn)行的集合或文件夾設(shè)置迭代次數(shù)和延遲。如果集合里的請求需要讀取 CSV 或 JSON 數(shù)據(jù)文件做參數(shù)化測試也可以在 Data 區(qū)域選擇文件Postman 會(huì)把文件里的每一行數(shù)據(jù)作為一次迭代的參數(shù)。運(yùn)行結(jié)束后結(jié)果頁會(huì)顯示每個(gè)請求的通過率、失敗請求和日志。這個(gè)功能對于“發(fā)版前冒煙測試”特別有用十幾分鐘就能把核心流程全部刷一遍。7. 新手踩坑合集請求調(diào)不通時(shí)先別急著懷疑后端7.1 最常見的報(bào)錯(cuò)Could not get response看到這個(gè)報(bào)錯(cuò)表示 Postman 根本沒有收到任何響應(yīng)。它可能是后端服務(wù)沒啟動(dòng)可能是接口地址寫錯(cuò)了可能是服務(wù)器防火墻攔截也可能是本地網(wǎng)絡(luò)代理出問題。新手最容易犯的是直接用了一個(gè)不存在的測試地址感嘆“為什么調(diào)不通”其實(shí)人家從來就沒有給過響應(yīng)。排查順序我建議是先用瀏覽器訪問這個(gè)接口地址看能不能打開再確認(rèn)后端服務(wù)是否在運(yùn)行然后看 URL 里有沒有拼寫錯(cuò)誤比如多了一個(gè)空格、少了一個(gè)斜杠最后檢查本地網(wǎng)絡(luò)或代理設(shè)置。這里要說一個(gè)正確的認(rèn)知Postman 只是一個(gè)客戶端它只負(fù)責(zé)把請求發(fā)出去并等待響應(yīng)服務(wù)端不響應(yīng)時(shí)工具本身沒有任何辦法“變出”返回?cái)?shù)據(jù)。7.2{{變量}}被當(dāng)成普通字符串發(fā)出去了如果你在 URL 或 Headers 里寫了{(lán){baseUrl}}但發(fā)送后后端收到的仍是字面量{{baseUrl}}最可能的原因是沒有選中正確的環(huán)境。Postman 只有在右上角環(huán)境下拉框選中了“本地開發(fā)”時(shí)才會(huì)把{{baseUrl}}替換成環(huán)境變量的當(dāng)前值。如果下拉框顯示的是 “No Environment”所有環(huán)境變量都不會(huì)生效。排查方法很簡單打開環(huán)境管理頁面確認(rèn)變量確實(shí)存在并且當(dāng)前值非空再回到請求編輯區(qū)鼠標(biāo)懸浮在{{baseUrl}}上Postman 會(huì)彈窗顯示它實(shí)際替換成了什么值。只要看到替換后的值不是花括號(hào)請求基本就沒這個(gè)問題了。7.3 返回 415 或 422大概率是 Body 格式不對415 是“不支持的媒體類型”422 是“請求格式正確但語義錯(cuò)誤”。前端聯(lián)調(diào)時(shí)碰到這兩個(gè)狀態(tài)碼往往就是 Body 里的數(shù)據(jù)格式和后端期望的不一致。最常見的是后端要 JSON你卻在 Body 里選了x-www-form-urlencoded或者反過來。另一個(gè)容易踩的坑是 JSON 本身格式錯(cuò)誤比如少了引號(hào)、多了一個(gè)逗號(hào)。你可以在發(fā)送前先看一眼編輯器的代碼高亮有沒有異常或者把 JSON 復(fù)制到任意 JSON 校驗(yàn)工具里檢查一下。記住Postman 不會(huì)幫你校驗(yàn) JSON 是否合法它只是原樣把文本發(fā)出去。7.4 登錄成功但帶 token 的請求還是 401開發(fā)環(huán)境里經(jīng)常出現(xiàn)這種現(xiàn)象登錄接口正常返回 token但業(yè)務(wù)請求帶上“正確”的 token 后仍然返回 401。大多數(shù)原因是 token 沒有寫入你當(dāng)前正在使用的環(huán)境或者寫入成功后又切換到了另一個(gè)環(huán)境。想確認(rèn) token 是否已經(jīng)生效可以在業(yè)務(wù)請求的 Headers 里把鼠標(biāo)放到{{token}}上看替換后的值是否和登錄返回的 token 一致。如果替換后是空字符串或者 undefined就回登錄請求的 Tests 腳本檢查pm.environment.set是否執(zhí)行成功。另外還要注意鑒權(quán)方式手動(dòng)在 Headers 里寫 Bearer Token 時(shí)值必須是Bearer 具體token中間必須有空格少了空格后端取不到 token也會(huì)返回 401。7.5 自簽名證書報(bào)錯(cuò)SSL 證書校驗(yàn)失敗如果你本地或內(nèi)網(wǎng)接口使用的是自簽名證書Postman 默認(rèn)會(huì)校驗(yàn)證書并報(bào)錯(cuò)提示SSL Error: unable to verify the first certificate。這種情況下臨時(shí)進(jìn)入 Postman 設(shè)置把SSL certificate verification關(guān)閉請求就能通過。但我必須提醒一句關(guān)閉證書校驗(yàn)只適合本地開發(fā)或內(nèi)網(wǎng)測試不要在訪問生產(chǎn)環(huán)境時(shí)長期關(guān)閉。生產(chǎn)環(huán)境證書驗(yàn)證是安全防線把它關(guān)掉等于告訴別人“我什么證書都信”這是很危險(xiǎn)的習(xí)慣。8. 值得養(yǎng)成的好習(xí)慣讓 Postman 真正變成團(tuán)隊(duì)協(xié)作工具8.1 集合描述寫清楚它就是你的接口文檔很多人建完集合只放請求從來不看集合描述區(qū)。其實(shí)集合描述支持 Markdown你可以寫清楚項(xiàng)目背景、本地啟動(dòng)方式、環(huán)境變量說明、常見報(bào)錯(cuò)處理方法。新同事拿到集合后打開描述就能自己動(dòng)手調(diào)通一個(gè)接口不再需要追著后端問“這個(gè)參數(shù)填什么”。我會(huì)在集合描述里固定放這么幾段項(xiàng)目簡介、Base URL 如何使用、每個(gè)環(huán)境對應(yīng)哪個(gè)地址、登錄 token 如何獲取、哪些請求有依賴關(guān)系。維護(hù)起來成本不高但對團(tuán)隊(duì)協(xié)作幫助極大。8.2 團(tuán)隊(duì)共享時(shí)注意敏感信息Postman 支持把集合共享到同一個(gè)工作區(qū)也可以直接邀請成員加入。共享后大家能看到同一個(gè)集合你更新請求同事打開就能看到新版本省去同步文件的痛苦。但正因?yàn)楣蚕矸奖忝舾行畔⒁惨貏e注意。不要把生產(chǎn)數(shù)據(jù)庫用戶名、密碼、私鑰這類信息寫進(jìn)被共享的環(huán)境變量里。如果一定要用盡量放在本地的當(dāng)前值把初始值留空或者給變量設(shè)置成 Secret 類型避免被其他成員直接看到。這個(gè)坑我見過不止一次有人把云廠商的secretKey直接寫在環(huán)境變量的初始值里然后整個(gè)集合分享出去等于把生產(chǎn)環(huán)境后門的鑰匙交給了所有同事甚至可能被誤傳到外部。8.3 給關(guān)鍵請求保存 Example減少溝通成本前端和后端之間最消耗精力的不是“會(huì)不會(huì)寫代碼”而是“接口返回結(jié)構(gòu)到底什么樣”。你可以約定每次后端改完接口都在 Postman 里重新發(fā)送并更新 Example。這樣前端在寫頁面時(shí)先打開 Example 看返回結(jié)構(gòu)再?zèng)Q定怎么取字段不需要一次次跑去問也不會(huì)因?yàn)榭陬^溝通理解不一致而反復(fù)返工。我的習(xí)慣是每個(gè)集合里至少給“登錄、列表查詢、詳情查詢、創(chuàng)建、更新”這幾個(gè)高頻請求保存 Example其他低頻接口可以視團(tuán)隊(duì)情況補(bǔ)充。這個(gè)習(xí)慣一旦形成接口文檔的維護(hù)壓力會(huì)小很多。8.4 先建集合、再調(diào)試的流程值得堅(jiān)持最后說一條我認(rèn)為最值得養(yǎng)成的個(gè)人習(xí)慣拿到一個(gè)新接口先在對應(yīng)集合里新建請求再開始填參數(shù)而不是直接在頂部空白區(qū)域“臨時(shí)體驗(yàn)”。新建請求看起來多了一步卻能保證所有調(diào)試資產(chǎn)都沉淀在集合里。調(diào)通以后順手寫幾條斷言再保存一個(gè) Example這套流程走下來一個(gè)接口的工作才算真正完成。我見過太多“臨時(shí)調(diào)通事后找不到請求”的團(tuán)隊(duì)每次接口報(bào)錯(cuò)都要從歷史記錄里翻翻不到就重新拼一遍參數(shù)。Postman 本身提供了很好的管理能力但工具不會(huì)替你養(yǎng)成習(xí)慣。從第一次用開始把每個(gè)請求都當(dāng)成正式資產(chǎn)來維護(hù)你很快就會(huì)感受到調(diào)試接口不再是體力活而是一套越用越順手的流程。