1、背景
測試存在問題:
1始藕、測試環(huán)境接口不穩(wěn)定
2、業(yè)務(wù)系統(tǒng)不是孤立存在的,關(guān)聯(lián)方太多伍派,而且關(guān)聯(lián)系統(tǒng)常常出現(xiàn)不穩(wěn)定的情況
3江耀、暫時無可用Mock server工具
4、接口未提測驗收完成诉植,前端測試提前介入
影響:
測試依賴數(shù)據(jù)祥国,依賴接口阻塞導(dǎo)致測試延期,干耗時間成本人力成本
解決方案:
引入Mock測試倍踪,有了Mock,測試童鞋在后端接口未準(zhǔn)備好時按照接口文檔就可以開始造數(shù)據(jù)進行測試工作索昂,不會出現(xiàn)測試一直等待開發(fā)的情況建车,也可以開發(fā)聯(lián)調(diào)與測試進行。這樣的話椒惨,開發(fā)自測階段就可以及早開展缤至,從而發(fā)現(xiàn)缺陷的時機也提前了,有利于整個產(chǎn)品app測試覆蓋率提升和產(chǎn)品項目進度的保證
2康谆、環(huán)境配置及準(zhǔn)備
2.1领斥、安裝charles及一些配置項說明
去 Charles 的官方網(wǎng)站(http://www.charlesproxy.com)下載最新版的 Charles 安裝包,是一個 dmg 后綴的文件沃暗。打開后將 Charles 拖到 Application 目錄下即完成安裝月洛。
-
2.1.1將 Charles 設(shè)置成系統(tǒng)代理
Charles 是通過將自己設(shè)置成代理服務(wù)器來完成封包截取的,所以使用 Charles 的第一步是將其設(shè)置成系統(tǒng)的代理服務(wù)器孽锥。
啟動 Charles 后嚼黔,第一次 Charles 會請求你給它設(shè)置系統(tǒng)代理的權(quán)限。你可以輸入登錄密碼授予 Charles 該權(quán)限惜辑。你也可以忽略該請求唬涧,然后在需要將 Charles 設(shè)置成系統(tǒng)代理時,選擇菜單中的 “Proxy” -> “Mac OS X Proxy” 來將 Charles 設(shè)置成系統(tǒng)代理盛撑。步驟如下:
* 1碎节、打開Charles程序
* 2、Mac連接上網(wǎng)絡(luò)paictest,查看Mac電腦的IP地址:
系統(tǒng)偏好設(shè)置->網(wǎng)絡(luò)就可以查看到了抵卫,比如我的ip地址是:172.16.0.238
* 3狮荔、將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 “Proxy”->”Proxy Settings”介粘,
填入代理端口 8888轴合,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上
的設(shè)置。
* 4碗短、要截取 iPhone 上的網(wǎng)絡(luò)請求:進入當(dāng)前wifi連接paictest(Mac在一個局域網(wǎng)內(nèi))受葛,
設(shè)置HTTP代理Group,將服務(wù)器填為上一步中獲得的IP,即172.16.0.238总滩,端口填8888.
* 5纲堵、打開 iPhone 上的任意需要網(wǎng)絡(luò)通訊的程序,就可以看到 Charles 彈出 iPhone
請求連接的確認(rèn)菜單(如下圖所示)闰渔,點擊 “Allow” 即可完成設(shè)置席函。
之后,你就可以看到源源不斷的網(wǎng)絡(luò)請求出現(xiàn)在 Charles 的界面中冈涧,如下圖所示(由于涉及部分業(yè)務(wù)茂附,馬賽克了)。
-
2.1.2安裝證書
如果你需要截取分析 Https 協(xié)議相關(guān)的內(nèi)容督弓。那么需要安裝 Charles 的 CA 證書营曼。具體步驟如下。
1愚隧、首先我們需要在 Mac 電腦上安裝證書蒂阱。點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”狂塘,然后輸入系統(tǒng)的帳號密碼录煤,即可在 KeyChain 看到添加好的證書。
需要注意的是荞胡,即使是安裝完證書之后妈踊,Charles 默認(rèn)也并不截取 Https 網(wǎng)絡(luò)通訊的信息,如果你想對截取某個網(wǎng)站上的所有 Https 網(wǎng)絡(luò)請求泪漂,可以在該請求上右擊响委,選擇 SSL proxy,如下圖所示:
這樣窖梁,對于該 Host 的所有 SSL 請求可以被截取到了赘风。
2、截取移動設(shè)備中的 Https 通訊信息
如果我們需要在 iOS 或 Android 機器上截取 Https 協(xié)議的通訊內(nèi)容纵刘,還需要在手機上安裝相應(yīng)的證書邀窃。點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device or Remote Browser”假哎,然后就可以看到 Charles 彈出的簡單的安裝教程瞬捕。在設(shè)備上設(shè)置好 Charles 為代理后,在手機瀏覽器中訪問地址:http://charlesproxy.com/getssl
即可打開證書安裝的界面舵抹,安裝完證書后肪虎,就可以截取手機上的 Https 通訊內(nèi)容了。不過同樣需要注意惧蛹,默認(rèn)情況下 Charles 并不做截取扇救,你還需要在要截取的網(wǎng)絡(luò)請求上右擊刑枝,選中SSL proxy 菜單項。
3迅腔、組件mock測試:eg: xx app 登錄業(yè)務(wù)
3.1 編輯網(wǎng)絡(luò)請求數(shù)據(jù)了解
根據(jù)具體的需求装畅,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能沧烈,都可以達到修改服務(wù)器返回內(nèi)容的目的掠兄。這三者在功能上的差異是:
Map 功能適合長期地將某一些請求重定向到另一個網(wǎng)絡(luò)地址或本地文件。
Rewrite 功能適合對網(wǎng)絡(luò)請求進行一些正則替換锌雀。
Breakpoints 功能適合做一些臨時性的修改蚂夕。
3.1.1 調(diào)試不同url的網(wǎng)絡(luò)請求
為了調(diào)試服務(wù)器的接口,我們需要反復(fù)嘗試不同參數(shù)的網(wǎng)絡(luò)請求腋逆。Charles 可以方便地提供網(wǎng)絡(luò)請求的修改和重發(fā)功能婿牍。只需要在以往的網(wǎng)絡(luò)請求上點擊右鍵,選擇 “Edit”闲礼,即可創(chuàng)建一個可編輯的網(wǎng)絡(luò)請求牍汹。如下所示:
我們可以修改該請求的任何信息铐维,包括 URL 地址柬泽、端口、參數(shù)等嫁蛇,之后點擊 “Execute” 即可發(fā)送該修改后的網(wǎng)絡(luò)請求(如下圖所示)锨并。
Charles 支持我們多次修改和發(fā)送該請求,這對于我們和服務(wù)器端調(diào)試接口非常方便
3.1.2 覆蓋服務(wù)器接口返回的不同異常情況
舉個例子:有一個訂單狀態(tài)接口 order_state睬棚,有已過期第煮、已失效、已支付抑党、待支付包警、已取消、待審核等10個狀態(tài)返回底靠,如果是在沒有mock的情況下害晦,我們需要實際造10個狀態(tài)的訂單數(shù)據(jù),甚至去修改數(shù)據(jù)庫訂單字段狀態(tài)來看前端訂單顯示情況暑中。利用Mock方法壹瘟,我們可以借助一些工具例如charles打斷點,截取接口返回的response的json數(shù)據(jù)鳄逾,進行一些模擬:比如
訂單接口發(fā)生服務(wù)器錯誤 or 系統(tǒng)繁忙時app是否崩潰稻轨;
訂單接口的各種狀態(tài)在前端顯示的覆蓋測試;
訂單狀態(tài)空的時候前端如何顯示的覆蓋測試雕凹;
訂單數(shù)據(jù)異常的時候前端如何顯示的覆蓋測試殴俱,
訂單接口請求超時的情況等等等總之想要什么返回就模擬什么返回政冻。
3.2 簡單的小例子:xx app 登錄login Mock測試
3.2.1 安裝測試包
打開手機,連接電腦安裝開戶組件app 成功,點擊app啟動成功粱挡,登錄成功赠幕,moudle名稱輸入模塊名稱(xxBanklogin進入xx app 登錄流程,利用charles抓包询筏,如下截圖
3.2.2 登錄測試Mock最基本實踐
breakpoints方法實踐過程:
在charless上要mock數(shù)據(jù)的url上右點擊榕堰,彈出的列表選中breakpoint,要點擊兩次 Excute 才能完成一次 HTTP 請求嫌套,原因是逆屡,Charles 的斷點功能分別提供了修改 HTTP Request 和 Response 的機會映射本地文件
先了解登錄接口定義:
- login接口一般有登錄超時、操作超時踱讨、登錄被擠下線魏蔗、登錄系統(tǒng)繁忙、賬戶和密碼錯誤痹筛、賬戶鎖定莺治、賬戶解密失敗等情況
每個接口對應(yīng)的response請求json記錄(可編輯修改):
一般有兩種處理方式可選擇:
一是直接在charels設(shè)置好斷點,請求相應(yīng)的接口時修改編輯response里面json格式的相關(guān)數(shù)據(jù)后點擊excute執(zhí)行模擬請求提交
二是將所有接口的json數(shù)據(jù)在一個Sublime text 中以json格式保存帚稠,進行數(shù)據(jù)管理谣旁,最后利用 charles Map 規(guī)則的導(dǎo)入導(dǎo)出功能,方法是點擊菜單 Tools → Map Local滋早,在彈出界面中點擊 Export
登錄login接口返回json記錄如下:
- 1榄审、登錄成功
{
"code": "000000",
"data": {
由于涉及到業(yè)務(wù)信息,部分data信息隱藏
"status": "0"
},
"msg": "成功"
}
- 2杆麸、操作超時
{
"code": "030801",
"msg": "操作超時"
}
- 3搁进、登錄報系統(tǒng)繁忙
{
"code": "000001",
"msg": "系統(tǒng)繁忙,請稍后再試昔头!"
}
- 4饼问、登錄超時
{
"code": "000002",
"msg": "登錄超時!"
}
- 5揭斧、登錄掉線
{
"code": "000004",
"msg": "賬戶在另一臺設(shè)備已登錄莱革,當(dāng)前登錄被擠下線!"
}