轉載:http://www.jianshu.com/p/03081c9d1559
1、背景
測試存在問題:
1、測試環境接口不穩定
2、業務系統不是孤立存在的,關聯方太多,而且關聯系統常常出現不穩定的情況
3、暫時無可用Mock server工具
4、接口未提測驗收完成,前端測試提前介入
影響:
測試依賴數據,依賴接口阻塞導致測試延期,干耗時間成本人力成本
解決方案:
引入Mock測試,有了Mock,測試童鞋在后端接口未准備好時按照接口文檔就可以開始造數據進行測試工作,不會出現測試一直等待開發的情況,也可以開發聯調與測試進行。這樣的話,開發自測階段就可以及早開展,從而發現缺陷的時機也提前了,有利於整個產品app測試覆蓋率提升和產品項目進度的保證
2、環境配置及准備
2.1、安裝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 設置成系統代理。步驟如下:
* 1、打開Charles程序 * 2、Mac連接上網絡paictest,查看Mac電腦的IP地址: 系統偏好設置->網絡就可以查看到了,比如我的ip地址是:172.16.0.238 * 3、將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 “Proxy”->”Proxy Settings”, 填入代理端口 8888,並且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上 的設置。 * 4、要截取 iPhone 上的網絡請求:進入當前wifi連接paictest(Mac在一個局域網內), 設置HTTP代理Group,將服務器填為上一步中獲得的IP,即172.16.0.238,端口填8888. * 5、打開 iPhone 上的任意需要網絡通訊的程序,就可以看到 Charles 彈出 iPhone 請求連接的確認菜單(如下圖所示),點擊 “Allow” 即可完成設置。
之后,你就可以看到源源不斷的網絡請求出現在 Charles 的界面中,如下圖所示(由於涉及部分業務,馬賽克了)。
-
2.1.2安裝證書
如果你需要截取分析 Https 協議相關的內容。那么需要安裝 Charles 的 CA 證書。具體步驟如下。
1、首先我們需要在 Mac 電腦上安裝證書。點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”,然后輸入系統的帳號密碼,即可在 KeyChain 看到添加好的證書。
需要注意的是,即使是安裝完證書之后,Charles 默認也並不截取 Https 網絡通訊的信息,如果你想對截取某個網站上的所有 Https 網絡請求,可以在該請求上右擊,選擇 SSL proxy,如下圖所示:
這樣,對於該 Host 的所有 SSL 請求可以被截取到了。
2、截取移動設備中的 Https 通訊信息
如果我們需要在 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 菜單項。
3、組件mock測試:eg: xx app 登錄業務
3.1 編輯網絡請求數據了解
根據具體的需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以達到修改服務器返回內容的目的。這三者在功能上的差異是:
Map 功能適合長期地將某一些請求重定向到另一個網絡地址或本地文件。
Rewrite 功能適合對網絡請求進行一些正則替換。
Breakpoints 功能適合做一些臨時性的修改。
3.1.1 調試不同url的網絡請求
為了調試服務器的接口,我們需要反復嘗試不同參數的網絡請求。Charles 可以方便地提供網絡請求的修改和重發功能。只需要在以往的網絡請求上點擊右鍵,選擇 “Edit”,即可創建一個可編輯的網絡請求。如下所示:
我們可以修改該請求的任何信息,包括 URL 地址、端口、參數等,之后點擊 “Execute” 即可發送該修改后的網絡請求(如下圖所示)。
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抓包,如下截圖
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記錄如下:
- 1、登錄成功
{ "code": "000000", "data": { 由於涉及到業務信息,部分data信息隱藏 "status": "0" }, "msg": "成功" } - 2、操作超時
{
"code": "030801", "msg": "操作超時" }
- 3、登錄報系統繁忙
{
"code": "000001", "msg": "系統繁忙,請稍后再試!" }
- 4、登錄超時
{
"code": "000002", "msg": "登錄超時!" }
- 5、登錄掉線
{
"code": "000004", "msg": "賬戶在另一台設備已登錄,當前登錄被擠下線!" }
