接口測試 Mock 實戰(二) | 結合 jq 完成批量化的手工 Mock

  • 2022 年 4 月 22 日
  • 筆記

因為本章的內容是使用jq工具配合完成,因此在開始部分會先花一定的篇幅介紹jq機器使用,如果讀者已經熟悉jq,可以直接跳過這部分。
先來看應用場景,App 經常會有一些信息展示的列表頁,比如商家的菜品、股票的公司、文章的列表展示等,例如下面這樣:
菜品不夠吃的話~不是,是菜品數量較少不夠測試的量,假如我們想要測試幾百個菜品時,會不會在刷的時候是否有性能影響,展示是否正常,列表展示的邊界值測試等;
而要測就得有數據展示,這個時候要是通過後端去找或者造這麼多數據是有點麻煩的,其實我們這個測試的測試點就是要測試前端頁面的展示和性能,只要有這部分數據就可以,無所謂數據是否真實從數據庫得來。
這個時候可以就可以利用mock的手段,對這種大數據進行等價類的生成,使前端可以拿到這類數據即可,而Charles正是我們實現手工mock測試的利器之一!
按慣例,先看官網對jq的解釋:
jq 官網地址:jq
大概意思就是輕量靈活的Json處理命令行。
用途
說到這大概有些人有點感覺它能用來做什麼了,為啥手工mock要使用jq了?沒錯!要用它來處理接口返回的json數據以達到mock的效果。

  • Mac:Mac還是一如既往的簡單(香~),裝了Homebrew 的話一條命令brew install jq即可

  • 其他系統:jq 的官網很貼心,給出了各個系統的下載方式及其相關所需下載工具的鏈接,具體的就查看官網吧,鏈接如下

  • 基本過濾 .
    簡單的說就是原樣輸出來:

  • 對象過濾 .key、.key1.key2、.[「key」]

  • 索引過濾 .key[index]、.key[ startIndex: endIndex]
    .key[index]
    .key[ startIndex: endIndex]

  • 對象構建 {} 、
    如果其中一個表達式有多個結果,那麼輸出也會產生多個結果
    如果key是不存在的,value將會賦值為null
    如果再鍵的周圍加括號就意味着它將作為表達式進行計算。

  • 其他常見用法:
    計算
    獲取長度

  • 數組運算
    jq 對於數組可以有並集(』+』)和差集(』-』)的操作:
    並集(』+』):有數組a,b; a+b就會得到一個包含所有a,b數組元素的新數組:
    差集(』-』):有數組a,b; a-b就會得到一個只包含a中元素,不包含b中元素的新數組:

  • 更多用法
    更多用法可參考官網:
    //stedolan.github.io/jq/manual/#Basicfilters
    如下圖中的科普推薦欄目中有 2 則科普文章,現在想要mock幾十甚至上百篇文章或廣告。

  • 抓取接口的響應json報文如下:

  • 我們將數據存入json文件中,然後賦值給一個變量

  • 然後我們利用jq對pageList中的列表進行+=操作,完成一次翻倍增長,將結果傳給變量mockData。
    按照上述的方法,每次列表的元素個數都會翻倍,也就是操作n次就變成2的n次方倍,指數增長的速度就不用多說了~
    這樣根據自己的需要得到數據後將新數據存入json文件,最重要的數據準備過程也就完成了:
    說了這麼多「廢話」,總算是到了主角了,其實數據準備好了,工具的使用還是很簡單的,Charles有一個叫做Map Local的功能,在你要mock的請求上右擊就可找到:
    Map Local可以對指定的接口返回使用本地文件進行替換,如這裡替換為上文中廢話半天生成的數據文件MockTest.json:
    然後再次刷新頁面,看看效果,頁面的列表就如願倍增了,也不用去數據庫添加數據,保存一份json文件即測即用即可:
    以上,期待大家一起交流,多多指正。
    【相關文章】

  • 基於 Charles 代理技術的接口測試 Mock 實戰 (一)

  • 接口測試策略與問題分析模型

原文鏈接