mock以及特殊場景下對mock資料的處理

2022-04-23 09:08:25 字數 892 閱讀 6861

一、為什麼要mock

工作中遇到以下問題,我們可以使用mock解決:

無法控制第三方系統某介面的返回,返回的資料不滿足要求

某依賴系統還未開發完成,就需要對被測系統進行測試

有些系統不支援重複請求,或有訪問訪問頻次限制。如不可重複支付,獲取敏感資訊的介面訪問頻次不可高於xx等

其他情況

二、mock的實現原理

一般測試場景中,都是對介面的返回資料進行mock。以http協議為例,

最簡單的mock,可在mock伺服器上儲存乙份mock資料,並給此mock資料生成對應的url。將要訪問的第三方url,以mock url代替,這樣即可滿足最基本的mock需求。可在此處了解到更多關於此種mock的資訊。

使用proxy實現mock。wiremock/anymock等開源工具可提供此實現。好處在於:

最近有接觸到一些函式級別的mock。比如,mockito這個工具,即可實現不發出請求,即可獲得mock資料的功能。

三、特殊場景下對mock資料的處理

有些場景對於mock來說較為特殊。比如,某介面對資料有加解密操作,這使得mock的資料無法直觀理解,無法有效率地調整mock資料的內容以完成測試目標。另外,有些rpc協議不具通用性,通用的mock平台來支援此類協議成本太高。所以,我們的需要對我們的方法做一些變通。

1. 對於介面加解密資料,我們開發乙個函式,來支援mock資料的加解密。手工測試時,該函式可表現為mock平台的外掛程式;介面自動化時可表現為處理mock資料的函式。也可以採用方法2.

2. 直接將這個函式的邏輯整體mock掉。開發某功能:當程式執行到指定的方法時,不繼續執行函式體,而是傳送乙個http請求到mock平台,將mock資料return出去。

特殊場景下的this指向

1 使用var宣告的全域性變數,在windows物件中,但let宣告的全域性變數,並不在windows物件中。let a 全域性變數 var a 全域性變數 let obj obj.foo 輸出undefined,如果使用var a定義變數,則輸出全域性變數 分析 箭頭函式中this直接指向的是呼叫...

說一下你對閉包的理解,以及你在什麼場景會用到閉包?

理解 簡單來說,閉包就是在函式裡面宣告函式,實際開發中主要應用於封裝變數,保護變數不受外界汙染,也相當於是在函式作用域裡面再宣告乙個內部作用域,這樣執行結果拿到的變數都是不同的,拿的就不是全域性變數。特性 函式內部巢狀函式 缺點 閉包容易消耗記憶體 注意 子函式可以訪問父函式中所有的區域性變數,但是...

多次RST以及不同場景下的RST報文的差異

在某個tcp互動過程中,我們發現在互動的後期,客戶端多次向伺服器端傳送rst報文,如下圖所示 我們首先來看客戶端發出的第乙個rst報文的解碼 rst與ack標誌位都置一了,並且具有ack number,非常明顯,這個報文在釋放tcp連線的同時,完成了對前面已接收報文的確認。我們再來看看客戶端發出的後...