根據百度百科的定義,mock測試就是在測試過程當中,對於某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來建立以便測試的測試方法。這個虛擬的對象就是mock對象,mock對象就是真實對象在調試期間的代替品。前端
在瀑布流開發模式中,若是前端開發人員須要進行頁面對接,須要後端先完成API的開發工做,若是沒有mock,那麼先後端開發的進度會互相影響。node
經過 Mock API事先編寫好 API 的數據生成規則,由工具動態生成 API 的返回數據。開發人員經過訪問 Mock API 來得到頁面所須要的數據,就能夠輕鬆地完成對接工做。json
在系統交互雙方定義好接口以後,咱們能夠提早進行開發和測試,並不依賴上游系統的開發實現。後端
在測試時使用Mock,能夠自由方便的構建配置接口對象的信息參數;api
在測試過程當中,須要第三方接口返回特定的數據以符合特定的測試場景,這種狀況每每須要跨條線的溝通協調測試數據,成本高,效率低;利用Mock能夠自定義返回測試結果,支持手動構造依賴接口的返回值。(這個功能將在後面重點說起)架構
在自動化測試概念和發展要求下,自動化測試的規模也逐漸增大到必定程度;app
大型業務系統下測試接口多,測試用例也日益增多,依賴環境的穩定就成爲了自動化測試執行的關鍵所在;工具
自動化測試過程當中,常常會由於依賴的第三方環境不穩定,致使測試執行失敗,長期以往的出現問題,致使測試人員對自動化的穩定運行失去維護的信心;測試
利用Mock技術,在測試過程當中,只關注被測業務邏輯,mock掉依賴不相關的系統,這種狀況下自動化測試運行失敗,就必定是被測系統自己的業務邏輯問題,而不是第三方系統、數據的問題;spa
接下來咱們從測試的層面舉個場景:
我所在的項目是企業管理諮詢,項目最常常須要的是根據企業詳情判斷返回不一樣的狀態。涉及到的數據其實不少,可是爲了方便舉例,我計劃寫三個接口進行演示,第一個是登陸,第二個是獲取企業詳情,簡化了複雜的判斷,直接用判斷corpld(企業ID)來做爲識別的憑證,第三個是設置企業狀態,有註銷和恢復兩種狀態。會根據企業的corpstatus進行判斷。接下來帶你一一設置:
登錄接口沒必要多講,咱們直接到第二個接口,新建一個指望,請求觸發條件不寫,在返回數據這裏添加corpstatus可能值爲1或者2。
第三個接口是設置企業狀態(註銷/恢復),這裏須要兩個請求參數,第一個是corpld企業ID,對應上個接口的corpld;第二個是corpstatus企業狀態,這裏引用了全局變量,用兩對花括號表示。
仍是進入mockapi新建指望,由於這裏有兩個狀態(註銷/恢復),因此須要寫兩個指望。當請求參數corpstatus=4條件觸發時,返回參數content=註銷成功;當請求參數corpstatus=2條件觸發時,返回參數content=企業已恢復。
因爲這三個接口都是應用在一個場景裏面的,咱們不妨用一個流程進行測試的,總共三個測試用例:
在測試前須要在第二個用例中要寫好一個響應預處理,經過Javascript代碼動態改變返回的結果,實現corpstatus=2或者4,從而對應上以前的全局變量。
而後就能夠點擊進行測試。從測試記錄能夠看到會根據corpstatus的不一樣返回了不一樣的信息。
這就是一個簡略完整的一個場景用例設計。那若是沒有mockapi的話,等着後端開發,corpstatus可能就拿不到,進度勢必會被影響,爲了模擬數據測試,這時候mockapi的優點就凸顯了。
下面再講一個使用mock自定義功能的項目場景:
以前所在公司子系統較多,咱們爲了減低集成和維護成本,採用了ESB的架構。ESB架構能夠解決多個應用系統互聯所面臨的的複雜性。也是由於子系統較多致使整個業務系統的運轉比較複雜,其中便涉及到和多個外部系統的對接及數據交互,好比倉儲和物流,勢必會跟EMS、順豐等有數據交互。
固然,跟外部系統對接時系統間的聯調測試必不可少,有些外部系統提供測試環境,有些甚至不提供。即使是提供測試環境的外部系統,通常也僅在開發聯調階段配合提供聯調測試對接服務,一旦聯調測試結束,也再也不繼續提供測試服務。
那麼,當這些外部系統的聯調測試環境不可用時,咱們就需模擬這些外部系統來和本身的系統進行數據交互,以便支持完整業務測試流程的正常進行。
再具體到API開發層面的話,就是開發的API常常遇到在URL同樣的狀況下,須要根據請求頭或者請求體的不一樣,返回不一樣測試結果。之前沒用mockapi自定義的功能的話,解決的方式只有新建多個接口分別進行,十分麻煩。
舉個例子,在API文檔創建後,在進行測試時,個人要求是在URL同樣的狀況下,根據不一樣的請求頭部返回不一樣結果。
1.當標籤頭部
Contest-type=application/json
Clientld=purchase.consemer
OperationCode= medicine.purchase.consemer.List
那麼返回參數
Floor=2
Room=2
Cabinet=2
2.當標籤頭部
Contest-type=application/json1
Clientld=purchase.consemer1
OperationCode= medicine.purchase.consemer.List1
那麼返回參數
Floor=3
Room=3
Cabinet=3
使用 eolinker 進行自定義 MOCK API?
eolinker 是一款接口管理工具,提供API管理、測試功能,本次咱們使用它來進行 Mock API,官網地址:https://www.eolinker.com
1.先創建好文檔
2.創建指望進行測試
3.寫完後測試後返回的數據與咱們的想要的一致
4.第二種狀況相似,就不贅述了
本篇文章主要從測試層面和角度去介紹 MOCK API,算是我上篇文章內容的延伸,最近一直在研究API測試相關,下篇我會從開發的層面去介紹 MOCK API 的實際應用。但願對你們有所幫助。eolinker官網:https://www.eolinker.com