天天看點

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進行判斷。接下來帶你一一設定:

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

登陸接口不必多講,我們直接到第二個接口,建立一個期望,請求觸發條件不寫,在傳回資料這裡添加corpstatus可能值為1或者2。

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

第三個接口是設定企業狀态(登出/恢複),這裡需要兩個請求參數,第一個是corpld企業ID,對應上個接口的corpld;第二個是corpstatus企業狀态,這裡引用了全局變量,用兩對花括号表示。

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

還是進入mockapi建立期望,因為這裡有兩個狀态(登出/恢複),是以需要寫兩個期望。當請求參數corpstatus=4條件觸發時,傳回參數content=登出成功;當請求參數corpstatus=2條件觸發時,傳回參數content=企業已恢複。

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

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

  1. 登陸
  2. 擷取企業詳情
  3. 設定企業狀态(登出/恢複)

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

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

然後就可以點選進行測試。從測試記錄可以看到會根據corpstatus的不同傳回了不同的資訊。

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

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

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

2.建立期望進行測試

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

3.寫完後測試後傳回的資料與我們的想要的一緻

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

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

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

本篇文章主要從測試層面和角度去介紹 MOCK API,下篇我會從開發的層面去介紹 MOCK API 的實際應用。希望對大家有所幫助。eolinker官網:https://www.eolinker.com