Postman最基本的功能用來重放請求,并且配合良好的response格式化工具,
高級點的用法可以使用Postman生成各個語言的腳本,還可以抓包,認證,傳輸檔案,
僅僅做到這些還不能夠滿足一個系統的開發,或者說過于瑣碎,你仍需要頻繁地在開發環境,測驗環境,生產環境中來回切換,單一的請求也不夠,你需要維護系統所有API的請求,并且每個請求還帶有不同的querystring和body,
1、Collection
對服務器端的所有請求按功能或者業務模塊進行組織,使用markdown對所有請求和示例添加適當的描述,這時候就用到了Collection,以下是postman的一些術語以及組織請求的建議,
詳細參考PostmanSDKConcepts以及creatingcollections,
Collection:對應一個Application,組內各個成員(server,client,QA)共享一個Collection,可以對整個Collection添加測驗,檔案,對于一開始未在postman組織請求的應用,可以設定Proxy,跑一遍應用,對應用的所有請求進行抓包,
Folder(Item Group):對應一個模塊,或者各層級子路由,如router.use(’/users’)所有的請求都在一個Folder,可以根據路由互相嵌套Folder,
Request(Item):對應一個請求,可以添加認證資訊,也可以設定代理,進行抓包,詳見capturinghttprequests,
Example:對應一個請求不同的引數以及回應,用于MockServer以及檔案,
postman可以根據Collection的結構生成檔案與MockServer,不過都是付費功能,免費版有次數限制,
2、檔案
postman自動生成檔案有助于團隊協作,解決了手動寫檔案,以及更新不及時的重大bug,
對于GET請求,Postman上可以添加對該欄位的描述,生成檔案,
對于POST以及PUT請求,如果Content-Type是form-data或者x-www-form-urlencoded可以添加描述生成檔案,不過如今傳遞json更方便靈活,所以application/json也會有很多,而且json又是不能添加注釋的,如果需要對json添加檔案說明的話,可以添加冗余欄位_{key}.comment標明注釋:

不過這樣冗余欄位過多,更好的解決方案是在測驗中對請求進行json校驗,同時充當了一部分檔案的功能,畢竟json-schema就是用來描述資料使資料更加可讀,
以上說到請求,對于回應的檔案,可以json-schema校驗或者每個欄位的描述,以及更多的測驗用例代表更多的細節,
3、Mock
當服務器端還沒有寫好API時,客戶端可以根據Examples來生成MockServer,
建議客戶端端自己做Mock,與專案集成在一起,納入版本控制,方便靈活,強烈推薦json-server,簡單好用,
4、測驗
對于每一個Request都需要有測驗用例,驗證回應是否成功,回應時間是否過長或者回應json的資料型別是否正確,
測驗可以使用pm.expect進行BDD測驗,風格和chai很像,如果熟悉chai就很容易上手,
postman內置了一些第三方庫,如果你更喜歡chai,可以直接使用,也可以使用pm.expect底層使用chai實作,與chaiBDDAPI一致,
postman也有一些http相關的測驗API,如statuscode,header,body,并且也提供了一些snippets,

5、Json Schema
json-schema可以用來描述json資訊,使json更加易讀,同時也可以用來校驗json的合法性,主流語言都有實作json-schema的庫,
建議對所有GET回應進行json-schema校驗,一來校驗資料,二來也可以作為檔案使用,使用tv4校驗json,

同樣對于請求也可以添加json校驗,不過更復雜一些,因為postman沒有直接給出獲取全部請求引數的api,需要自己決議和計算
如果postman可以根據請求引數的json-schema自動生成資料就好了…
6、測驗請求引數
一個請求帶有若干引數,如GET的querystring(search)以及POST的body,不同的引數會有不同的回應,
假設一個請求不同引數回傳的jsonschema完全不同,則可以寫成兩個Request分開測驗,如果回傳的jsonschema相同,只是值不同,則需要考慮傳遞了哪些引數,引數是多少,
一個經典的場景,根據filter來篩選符合條件的串列,拿用戶串列舉例,偽代碼如下:

一個思路是根據請求的引數進行測驗,一段重要的snipet是在postman中獲取querystring,query是一種PropertyList的資料,定義在postman-collection-PropertyList,如下:
當然以上filter只包含了最簡單的場景,其中只涉及到了相等測驗,但是有不等以及包含關系呢,

這種請求引數依賴于前后端的協商交流,當然對測驗或者一個不知情的開發來說很不友好的,
當然對于后端也是不友好的,因為需要對你傳入的每個query來進行處理,而且以后每添加一個篩選欄位,都需要手動改一下,
可以由前端自行決定需要篩選的資料,比如使用類似于mongo的檢索語法,
graphql是相當酷的,值得嘗試一下,

不過這對于測驗的開發能力要求也比較高了,測驗人員需要決議引數并且測驗介面,
7、測驗多次請求
當對一個函式進行單元測驗時,需要大量的輸入以及期望輸出,在postman中,可以使用data來模擬多次輸入,
data是一種變數,只能在Runner中使用,有必要對每個Folder建立相關的datafile,并且加入版本控制,
using csvan djson files in the postman collection runner
8、集成測驗
單個API測驗通過后,需要把所有請求集成在一起進行測驗,這時候出現了兩個問題:
如何確保API依賴
API之間如何傳遞資料
請求在Collection的順序就是他們的發起請求的順序,如果需要強制更改順序,可以使用setNextRuest()
在postman中有三種作用域的資料,data,environment,global,在請求中用{{}}占位符替代,
environment可以用來更改HOST,避免在url中頻繁手動切換本地環境,開發環境和生產環境,另外也可以用來傳遞資料,
一個常見的場景是專案使用token來保存登錄資訊,每次請求都需要攜帶token,可以在登錄的測驗代碼中設定token的環境變數,

9、測驗Collection
確保依賴后,可以對Collection新建一個Runner,并且引入一個data檔案來測驗所有的請求,對區域的Folder也可以使用Runner以及data進行測驗,
最新版本的postman已經可以支持,為每個Postman新建變數以及Test
所有的請求都會有一些共同測驗,比如測驗介面是否回應成功以及以上提到的測驗filter,

10、持續集成
當可以測驗Collection后,需要對測驗加入版本控制,與專案集成在一起,保留測驗記錄,以便準時定位bug,可以與postman的官方工具newman集成在一起,但是有一點不方便的是,持續集成僅僅可以保存記錄,并不能還原記錄,
11、對比UI自動化測驗
按照我的理解,UI自動化測驗目的是用來測驗流程是否通暢,比如登陸,注冊,退出,如果用例沒通過則截屏,但是前端需求的不斷變化,加上現在各種前端框架,導致selector不是特別容易獲取到且流程容易更改,
而API自動化測驗用來測驗資料是否正確,而且大部分問題是出在資料問題上,所以API自動化測驗性價比比較高一些,
12、總結
1)如何撰寫測驗用例
postman底層使用chai.js的bdd語法作為斷言庫,另外加了一些特有的語法,
2)如何debug
點擊選單欄View->ShowDevtools(ShowPostmanConsole)可以查看回應,檢查輸出,不過不能打斷點,對于系統的單個請求,可以使用Proxy監聽請求進行除錯,
3)如何使用js第三方庫對請求就行預處理以及后處理
比如:發送請求時,服務器端要求時間為timestmap(unix)的格式,但介面除錯時可讀性過弱,是否可以使用moment轉化時間,
收到回應時,也需要moment對時間進行決議,獲得更好的展現形式,或者使用lodash一些函式進行資料的處理,
可以在Tests和Pre-requestScript中撰寫腳本對請求以及回應做一些處理,但是不能對資料格式化,比如日期,
建議前后端交流日期時使用ISO格式的字串,前后端都容易決議,并且可讀性強,
4)如何管理請求依賴
比如:兩個API需要有依賴關系,比如當創建完一個用戶后(注冊),獲取他的個人資訊,獲取個人資訊就需要依賴創建用戶這個API,使用Environment Variables可以管理依賴,
5)如何設定統一的請求引數
比如:大部分介面都需要統一的token引數,目前好像沒什么辦法,
6)如何集成到服務器端專案中
如果系統后續版本沒有通過API測驗,則保留測驗記錄是很重要的,版本控制可以得知該時間段內的代碼變更,以git為例,需要每次提交后運行測驗,并保留測驗結果,可以使用npm包newman來集成到專案中,
文章來源:網路 著作權歸原作者所有
上文內容不用于商業目的,如涉及知識產權問題,請權利人聯系小編,我們將立即處理
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/345721.html
標籤:其他
上一篇:git 的詳細使用 操作暫存區
