<轉>charles Mock測試總結

測試存在問題:
一、測試環境接口不穩定
二、業務系統不是孤立存在的,關聯方太多,並且關聯繫統經常出現不穩定的狀況
三、暫時無可用Mock server工具
四、接口未提測驗收完成,前端測試提早介入
影響:
測試依賴數據,依賴接口阻塞致使測試延期,乾耗時間成本人力成本
解決方案:
引入Mock測試,有了Mock,測試童鞋在後端接口未準備好時按照接口文檔就能夠開始造數據進行測試工做,不會出現測試一直等待開發的狀況,也能夠開發聯調與測試進行。這樣的話,開發自測階段就能夠及早開展,從而發現缺陷的時機也提早了,有利於整個產品app測試覆蓋率提高和產品項目進度的保證css

二、環境配置及準備

2.一、安裝charles及一些配置項說明

去 Charles 的官方網站(http://www.charlesproxy.com)下載最新版的 Charles 安裝包,是一個 dmg 後綴的文件。打開後將 Charles 拖到 Application 目錄下即完成安裝。前端

  • 2.1.1將 Charles 設置成系統代理

Charles 是經過將本身設置成代理服務器來完成封包截取的,因此使用 Charles 的第一步是將其設置成系統的代理服務器。數據庫

啓動 Charles 後,第一次 Charles 會請求你給它設置系統代理的權限。你能夠輸入登陸密碼授予 Charles 該權限。你也能夠忽略該請求,而後在須要將 Charles 設置成系統代理時,選擇菜單中的 「Proxy」 -> 「Mac OS X Proxy」 來將 Charles 設置成系統代理。步驟以下:json

* 一、打開Charles程序
* 二、Mac鏈接上網絡paictest,查看Mac電腦的IP地址: 系統偏好設置->網絡就能夠查看到了,好比個人ip地址是:172.16.0.238 * 三、將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 「Proxy」->」Proxy Settings」, 填入代理端口 8888,而且勾上 「Enable transparent HTTP proxying」 就完成了在 Charles 上 的設置。 * 四、要截取 iPhone 上的網絡請求:進入當前wifi鏈接paictest(Mac在一個局域網內), 設置HTTP代理Group,將服務器填爲上一步中得到的IP,即172.16.0.238,端口填8888. * 五、打開 iPhone 上的任意須要網絡通信的程序,就能夠看到 Charles 彈出 iPhone 請求鏈接的確認菜單(以下圖所示),點擊 「Allow」 便可完成設置。 

以後,你就能夠看到源源不斷的網絡請求出如今 Charles 的界面中,以下圖所示(因爲涉及部分業務,馬賽克了)。後端

 
網絡抓包.jpeg
  • 2.1.2安裝證書

若是你須要截取分析 Https 協議相關的內容。那麼須要安裝 Charles 的 CA 證書。具體步驟以下。瀏覽器

一、首先咱們須要在 Mac 電腦上安裝證書。點擊 Charles 的頂部菜單,選擇 「Help」 -> 「SSL Proxying」 -> 「Install Charles Root Certificate」,而後輸入系統的賬號密碼,便可在 KeyChain 看到添加好的證書。bash

須要注意的是,即便是安裝完證書以後,Charles 默認也並不截取 Https 網絡通信的信息,若是你想對截取某個網站上的全部 Https 網絡請求,能夠在該請求上右擊,選擇 SSL proxy,以下圖所示:服務器

 
SSL proxy setting.png

這樣,對於該 Host 的全部 SSL 請求能夠被截取到了。網絡

二、截取移動設備中的 Https 通信信息app

若是咱們須要在 iOS 或 Android 機器上截取 Https 協議的通信內容,還須要在手機上安裝相應的證書。點擊 Charles 的頂部菜單,選擇 「Help」 -> 「SSL Proxying」 -> 「Install Charles Root Certificate on a Mobile Device or Remote Browser」,而後就能夠看到 Charles 彈出的簡單的安裝教程。在設備上設置好 Charles 爲代理後,在手機瀏覽器中訪問地址:http://charlesproxy.com/getssl
便可打開證書安裝的界面,安裝完證書後,就能夠截取手機上的 Https 通信內容了。不過一樣須要注意,默認狀況下 Charles 並不作截取,你還須要在要截取的網絡請求上右擊,選中SSL proxy 菜單項。

三、組件mock測試:eg: xx app 登陸業務

3.1 編輯網絡請求數據瞭解

根據具體的需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,均可以達到修改服務器返回內容的目的。這三者在功能上的差別是:
Map 功能適合長期地將某一些請求重定向到另外一個網絡地址或本地文件。
Rewrite 功能適合對網絡請求進行一些正則替換。
Breakpoints 功能適合作一些臨時性的修改。

3.1.1 調試不一樣url的網絡請求

爲了調試服務器的接口,咱們須要反覆嘗試不一樣參數的網絡請求。Charles 能夠方便地提供網絡請求的修改和重發功能。只須要在以往的網絡請求上點擊右鍵,選擇 「Edit」,便可建立一個可編輯的網絡請求。以下所示:

咱們能夠修改該請求的任何信息,包括 URL 地址、端口、參數等,以後點擊 「Execute」 便可發送該修改後的網絡請求(以下圖所示)。

 
edit網絡請求.png

Charles 支持咱們屢次修改和發送該請求,這對於咱們和服務器端調試接口很是方便

3.1.2 覆蓋服務器接口返回的不一樣異常狀況

舉個例子:有一個訂單狀態接口 order_state,有已過時、已失效、已支付、待支付、已取消、待審覈等10個狀態返回,若是是在沒有mock的狀況下,咱們須要實際造10個狀態的訂單數據,甚至去修改數據庫訂單字段狀態來看前端訂單顯示狀況。利用Mock方法,咱們能夠藉助一些工具例如charles打斷點,截取接口返回的response的json數據,進行一些模擬:好比
訂單接口發生服務器錯誤 or 系統繁忙時app是否崩潰;
訂單接口的各類狀態在前端顯示的覆蓋測試;
訂單狀態空的時候前端如何顯示的覆蓋測試;
訂單數據異常的時候前端如何顯示的覆蓋測試,
訂單接口請求超時的狀況等等等總之想要什麼返回就模擬什麼返回。

3.2 簡單的小例子:xx app 登陸login Mock測試

3.2.1 安裝測試包

打開手機,鏈接電腦安裝開戶組件app 成功,點擊app啓動成功,登陸成功,moudle名稱輸入模塊名稱(xxBanklogin進入xx app 登陸流程,利用charles抓包,以下截圖

 
登陸.jpeg

3.2.2 登陸測試Mock最基本實踐

breakpoints方法實踐過程:

在charless上要mock數據的url上右點擊,彈出的列表選中breakpoint,要點擊兩次 Excute 才能完成一次 HTTP 請求,緣由是,Charles 的斷點功能分別提供了修改 HTTP Request 和 Response 的機會映射本地文件

先了解登陸接口定義:
  • login接口通常有登陸超時、操做超時、登陸被擠下線、登陸系統繁忙、帳戶和密碼錯誤、帳戶鎖定、帳戶解密失敗等狀況
每一個接口對應的response請求json記錄(可編輯修改):

通常有兩種處理方式可選擇:
一是直接在charels設置好斷點,請求相應的接口時修改編輯response裏面json格式的相關數據後點擊excute執行模擬請求提交
二是將全部接口的json數據在一個Sublime text 中以json格式保存,進行數據管理,最後利用 charles Map 規則的導入導出功能,方法是點擊菜單 Tools → Map Local,在彈出界面中點擊 Export

登陸login接口返回json記錄以下:
  • 一、登陸成功
{
"code": "000000",
"data": {
因爲涉及到業務信息,部分data信息隱藏
"status": "0"
},
"msg": "成功"
}
  • 二、操做超時
{ "code": "030801", "msg": "操做超時" } 
  • 三、登陸報系統繁忙
{ "code": "000001", "msg": "系統繁忙,請稍後再試!" } 
  • 四、登陸超時
{ "code": "000002", "msg": "登陸超時!" } 
  • 五、登陸掉線
{ "code": "000004", "msg": "帳戶在另外一臺設備已登陸,當前登陸被擠下線!" } 
 
 做者:蕭竹 出處:https://www.jianshu.com/u/88caeb7696f5 本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
相關文章
相關標籤/搜索