MOCK API 的定義及實踐(使用eolinker實現)

MOCK API 的定義

根據百度百科的定義,mock測試就是在測試過程中,對於某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來創建以便測試的測試方法。這個虛擬的對象就是mock對象,mock對象就是真實對象在調試期間的代替品。

在瀑布流開發模式中,如果前端開發人員需要進行頁面對接,需要後端先完成API的開發工作,如果沒有mock,那麼前後端開發的進度會互相影響。

通過 Mock API事先編寫好 API 的數據生成規則,由工具動態生成 API 的返回數據。開發人員通過訪問 Mock API 來獲得頁面所需要的數據,就可以輕鬆地完成對接工作。

MOCK API 能用來解決什麼?

1.依賴的接口尚未開發完成

在系統交互雙方定義好接口之後,我們可以提前進行開發和測試,並不依賴上游系統的開發實現。

2.自定義返回測試結果(比如 HttpservletRequet、JDBC 對象等)

在測試時使用Mock,可以自由方便的構建配置接口對象的信息參數;

在測試過程中,需要第三方接口返回特定的數據以符合特定的測試場景,這種情況往往需要跨條線的溝通協調測試數據,成本高,效率低;利用Mock可以自定義返回測試結果,支持手動構造依賴接口的返回值。(這個功能將在後面重點提及)

3.自動化測試

在自動化測試概念和發展要求下,自動化測試的規模也逐漸增大到一定程度;

大型業務系統下測試接口多,測試用例也日益增多,依賴環境的穩定就成爲了自動化測試執行的關鍵所在;

自動化測試過程中,經常會因爲依賴的第三方環境不穩定,導致測試執行失敗,長期以往的出現問題,導致測試人員對自動化的穩定運行失去維護的信心;

利用Mock技術,在測試過程中,只關注被測業務邏輯,mock掉依賴不相關的系統,這種情況下自動化測試運行失敗,就一定是被測系統本身的業務邏輯問題,而不是第三方系統、數據的問題;

4.更多場景,歡迎看客老爺補充。

應用場景示例(自定義返回結果)

接下來我們從測試的層面舉個場景:

我所在的項目是企業管理諮詢,項目最經常需要的是根據企業詳情判斷返回不同的狀態。涉及到的數據其實很多,但是爲了方便舉例,我計劃寫三個接口進行演示,第一個是登錄,第二個是獲取企業詳情,簡化了複雜的判斷,直接用判斷corpld(企業ID)來作爲識別的憑證,第三個是設置企業狀態,有註銷和恢復兩種狀態。會根據企業的corpstatus進行判斷。接下來帶你一一設置:

1.png

登陸接口不必多講,我們直接到第二個接口,新建一個期望,請求觸發條件不寫,在返回數據這裏添加corpstatus可能值爲1或者2。

2.png

第三個接口是設置企業狀態(註銷/恢復),這裏需要兩個請求參數,第一個是corpld企業ID,對應上個接口的corpld;第二個是corpstatus企業狀態,這裏引用了全局變量,用兩對花括號表示。

3.png

還是進入mockapi新建期望,因爲這裏有兩個狀態(註銷/恢復),所以需要寫兩個期望。當請求參數corpstatus=4條件觸發時,返回參數content=註銷成功;當請求參數corpstatus=2條件觸發時,返回參數content=企業已恢復。

4.png

5.png

由於這三個接口都是應用在一個場景裏面的,我們不妨用一個流程進行測試的,總共三個測試用例:

  1. 登陸
  2. 獲取企業詳情
  3. 設置企業狀態(註銷/恢復)

在測試前需要在第二個用例中要寫好一個響應預處理,通過Javascript代碼動態改變返回的結果,實現corpstatus=2或者4,從而對應上之前的全局變量。

6.png

然後就可以點擊進行測試。從測試記錄可以看到會根據corpstatus的不同返回了不同的信息。

7.png

8.png

這就是一個簡略完整的一個場景用例設計。那如果沒有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.先建立好文檔

9.png

2.建立期望進行測試

10.png

3.寫完後測試後返回的數據與我們的想要的一致

11.png

4.第二種情況類似,就不贅述了

12.png

本篇文章主要從測試層面和角度去介紹 MOCK API,算是我上篇文章內容的延伸,最近一直在研究API測試相關,下篇我會從開發的層面去介紹 MOCK API 的實際應用。希望對大家有所幫助。eolinker官網:https://www.eolinker.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章