专项-弱网络测试
-
弱網(wǎng)絡(luò)
簡單理解:網(wǎng)絡(luò)不好;網(wǎng)絡(luò)環(huán)境復(fù)雜、使用場景多變;異常邏輯檢查。
-
弱網(wǎng)絡(luò)測什么
測試標(biāo)準(zhǔn)
客戶端的核心場景必須有斷線重連機(jī)制,并在有網(wǎng)絡(luò)抖動(dòng)、延時(shí)、丟包的網(wǎng)絡(luò)場景下,客戶端需達(dá)到以下要求:
一. 不能出現(xiàn)以下現(xiàn)象:
1、游戲中不能出現(xiàn)收支不等、客戶端卡死/崩潰等異常情況;
2、游戲核心功能(如登錄、單局、支付等)不能有導(dǎo)致游戲無法正常進(jìn)行的UI、交互問題;
3、不能有損害玩家利益或可被玩家額外獲利的問題;
4、需要有合理的斷線重連機(jī)制,避免每次重連都返回到登錄界面。
二. 需要對延時(shí)的有合理的提示
參數(shù):
特征參數(shù)
2G、3G、4G、5G
異常參數(shù)
? 上行100%丟包
? 下行100%丟包
測試內(nèi)容:
體驗(yàn):合理提示、主流網(wǎng)絡(luò)場景下不會(huì)影響正常使用(持續(xù)表現(xiàn))
邏輯:健壯、安全(斷網(wǎng)過程、斷網(wǎng)重連后狀態(tài))
游戲交互的基本原理:
? 游戲基本都是基于TCP/UDP協(xié)議(傳輸層),
簡單理解:
TCP 長連接,游戲登錄后一直保持連接,
S 服務(wù)端:一直監(jiān)聽請求/響應(yīng)請求
C 客戶端:向服務(wù)器發(fā)送請求/接收請求
游戲?qū)嵸|(zhì):客戶端只是軀殼,隱藏在各個(gè)界面元素身上的各種消息邏輯才是觸發(fā)界面表現(xiàn)的根本原因。C、S通過各種消息實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換,觸發(fā)界面表現(xiàn)的變化。
舉例:
購買道具:你點(diǎn)了購買按鈕,客戶端向服務(wù)器發(fā)了購買消息(金幣數(shù)、賬號(hào)信息等),服務(wù)端收到后判斷(錢夠不夠,合法性)后回復(fù)響應(yīng)消息,客戶端收到消息認(rèn)定購買成功或者失敗(提示成功扣錢,提示失敗,xxx)
異常情況:(比如:C發(fā)了購買消息,上行丟包超時(shí),不會(huì)發(fā)出去購買消息, 那么客戶端和服務(wù)端狀態(tài)都不會(huì)刷新, 但是如果下行丟包超時(shí),S狀態(tài)已經(jīng)變化,C的狀態(tài)如果不刷新,會(huì)出現(xiàn)按鈕操作無響應(yīng)或者其他異常)
弱網(wǎng)測試是指弱網(wǎng)絡(luò)場景下測試游戲表現(xiàn),實(shí)質(zhì)上是借助弱網(wǎng)絡(luò)的丟包、亂序等發(fā)現(xiàn)游戲設(shè)計(jì)的邏輯異常,其中核心是上、下行丟包及觸發(fā)重連機(jī)制后前后端邏輯一致性。
弱網(wǎng)絡(luò)常見問題:
- 資源、數(shù)據(jù)未加載
- 操作無響應(yīng)
- 不同步
- 卡流程
測試重點(diǎn)
-
游戲流程(例如:啟動(dòng)、登錄、進(jìn)入游戲、準(zhǔn)備/選人、跳流程階段、游戲結(jié)算等)
-
支付(例如:充值,iOS特別要注意下拉起較慢的情況)
-
購買、領(lǐng)獎(jiǎng)等貨幣相關(guān)(例如:購買鉆石、購買道具、游戲復(fù)活等;每日獎(jiǎng)勵(lì)、任務(wù)獎(jiǎng)勵(lì)、抽獎(jiǎng)等)
-
狀態(tài)相關(guān)(例如:跳轉(zhuǎn)、刷新界面、刷新按鈕、使用技能等)
-
斷線重連機(jī)制(例如:斷網(wǎng)提示、自動(dòng)重連、失敗提示等)
-
網(wǎng)絡(luò)敏感的交互功能(例如:實(shí)時(shí)對戰(zhàn),多人一定要考慮相互影響,注意同步方案-幀同步/狀態(tài)同步等)
-
單位時(shí)間內(nèi)重復(fù)操作(例如:快速重復(fù)操作,一般情況下會(huì)做點(diǎn)擊限制)
上下行丟包超時(shí)重連、切換網(wǎng)絡(luò)、無網(wǎng)絡(luò)等場景下關(guān)注以上內(nèi)容
誤區(qū)
-
弱網(wǎng)絡(luò) ≠ 異常中斷
異常中斷 會(huì)觸發(fā) 斷線重連(物理中斷、非物理中斷)
斷線重連分2種,第1種是從登陸(冷啟動(dòng))完成重連(殺進(jìn)程),第2種是過程中(熱啟動(dòng))重連(超時(shí)重連、斷wifi快速重連)
熱啟動(dòng)/冷啟動(dòng),進(jìn)程在/不在,是否需要重新加載。
弱網(wǎng)絡(luò)上、下行丟包超時(shí)重連屬于非物理中斷中的斷線重連,
常規(guī)測試中,物理性的異常中斷(殺進(jìn)程、斷wifi、電話短信)是需要測試的。
-
上、下行丟包 ≠ 斷網(wǎng)(上、下行100%丟包)
斷網(wǎng)好比把路堵了;上、下行丟包好比單向通行。
-
專業(yè)術(shù)語
-
丟包
TCP/IP協(xié)議通信傳輸中的數(shù)據(jù)單位,一般也稱“數(shù)據(jù)包”,它包含發(fā)送者和接收者的地址信息。這些包然后沿著不同的路徑在一個(gè)或多個(gè)網(wǎng)絡(luò)中傳輸,并且在目的地重新組合。
-
延時(shí)
-
帶寬
-
誤碼
編碼、解碼、轉(zhuǎn)碼
-
亂序
不同消息包發(fā)送先后不一,傳輸路徑不同,理論上是先發(fā)先至,但極低概率會(huì)后發(fā)先至
-
上、下行
上行: C—S(客戶端到服務(wù)器)
下行: S—C(服務(wù)器到客戶端)
-
-
工具及原理
工具
-
QNET
-
Fiddler 、Charles、WiFi管家等等
模擬弱網(wǎng)絡(luò)的原理
-
WIFI-設(shè)備之間(中間加代理)
-
WIFI(出口做限制)
QNET是在連接的網(wǎng)絡(luò)和設(shè)備內(nèi)的應(yīng)用之間建立了VPN(=代理),通過控制相應(yīng)參數(shù),以控制對應(yīng)用上、下行消息的網(wǎng)絡(luò)狀態(tài)。
C — S (消息直傳,只受所連接的網(wǎng)絡(luò)條件影響)
C — 代理 —S(消息均會(huì)經(jīng)過代理進(jìn)行轉(zhuǎn)發(fā),代理控制 丟包、延遲、帶寬)
-
怎么開展弱網(wǎng)絡(luò)測試
工具(QNET)下載安裝
https://wetest.qq.com/product/qnet
工具使用演示(略)
略
測試過程
- 了解及理解游戲,從前、后端技術(shù)棧、架構(gòu)上,游戲類型同類參考上,特別是要搞清楚斷線重連機(jī)制,初步分析風(fēng)險(xiǎn)點(diǎn)。
- 寫用例,參考測試重點(diǎn),參考弱網(wǎng)絡(luò)用例模板,
- 開始測試,在各條用例上完成以下幾步操作
- 編寫報(bào)告
- 總結(jié)經(jīng)驗(yàn)、歸檔
用例
2部分,1部分是測試異常網(wǎng)絡(luò)(上、下行丟包、切換網(wǎng)絡(luò)),1部分測試特征網(wǎng)絡(luò)(2、3、4、5G等),如:
異常網(wǎng)絡(luò)(分上行、下行2部分):
超時(shí)處理(一直觀察從弱網(wǎng)參數(shù)生效開始的游戲表現(xiàn),主要是驗(yàn)證斷線重連邏輯)
再次請求(重連后再次進(jìn)行操作,比如:弱網(wǎng)參數(shù)下點(diǎn)擊領(lǐng)獎(jiǎng)后,重連完成,再次點(diǎn)擊領(lǐng)獎(jiǎng)的表現(xiàn))
多次請求(弱網(wǎng)參數(shù)下多次進(jìn)行操作,比如:弱網(wǎng)參數(shù)下多次點(diǎn)擊領(lǐng)獎(jiǎng),如做限制則無法點(diǎn)擊)
切換網(wǎng)絡(luò)(切換不同網(wǎng)絡(luò),一般情況下WIFI/4G)
分別在以上操作下驗(yàn)證是否符合測試標(biāo)準(zhǔn),如:
| 1.不會(huì)無限重試 |
| 2.有合理提示,引導(dǎo)玩家回到登錄前界面 |
| 3.網(wǎng)絡(luò)恢復(fù)后可以正常登錄/重回 |
| 4.登錄/重回轉(zhuǎn)菊花期間網(wǎng)絡(luò)恢復(fù),無異常 |
| 5.多次請求后網(wǎng)絡(luò)恢復(fù),可以正常登錄 |
特征網(wǎng)絡(luò)(2G/3G/4G等)
游戲體驗(yàn)(流暢、一般、難以忍受、無法游戲)
| 流暢:操作體驗(yàn)流暢,沒有響應(yīng)失敗,反復(fù)重連的現(xiàn)象 |
| 一般:操作體驗(yàn)一般,偶爾有響應(yīng)失敗和響應(yīng)時(shí)間長的現(xiàn)象 |
| 難以忍受:操作體驗(yàn)極差,經(jīng)常性連接失敗,反復(fù)重連 |
| 無法游戲:無法正常游戲,經(jīng)常性掉線 |
測試
進(jìn)入測試場景后,開啟當(dāng)前需測試網(wǎng)絡(luò)參數(shù),持續(xù)觀察游戲表現(xiàn)或進(jìn)行相關(guān)操作。
比如:購買物品測試過程,
開啟上行丟包超時(shí),開啟后點(diǎn)擊購買,此時(shí)會(huì)出現(xiàn)菊花等待響應(yīng)狀態(tài),觀察界面表現(xiàn),正常情況下一定時(shí)間會(huì)有網(wǎng)絡(luò)斷開提示,提示后會(huì)觸發(fā)自動(dòng)重連,重連n次失敗,會(huì)提示框回到登錄。
恢復(fù)正常網(wǎng)絡(luò),再次點(diǎn)擊購買
開啟上行丟包超時(shí),連續(xù)點(diǎn)擊購買
選中4G,切換3G,馬上點(diǎn)擊購買,切換4G,再次點(diǎn)擊購買
分別在2G/3G/4G網(wǎng)絡(luò)參數(shù)下,購買物品,觀察體驗(yàn)
報(bào)告
報(bào)告包含內(nèi)容(根據(jù)情況加入解決建議):
測試結(jié)論(問題列表)、項(xiàng)目概述(測試標(biāo)準(zhǔn)、測試參數(shù)、測試場景)
總結(jié)、歸檔
略
分享總結(jié)
分享后需要理解內(nèi)容:
- 什么是弱網(wǎng)絡(luò)
- 弱網(wǎng)絡(luò)與斷線重連的關(guān)系
- 弱網(wǎng)絡(luò)測試方法
- 弱網(wǎng)絡(luò)測試重點(diǎn)
- 如何編寫弱網(wǎng)絡(luò)測試報(bào)告
擴(kuò)展學(xué)習(xí)了解內(nèi)容:
- OSI七層網(wǎng)絡(luò)模型
- TCP\UDP協(xié)議,Protocol Buffer, socket
- 冷啟動(dòng)、熱啟動(dòng)
- 計(jì)算機(jī)默認(rèn)初始時(shí)間1970-1-1
后續(xù)進(jìn)階
弱網(wǎng)絡(luò)測試?yán)斫庠砗?#xff0c;擴(kuò)展到 消息亂序和改包后的處理已經(jīng)涉及一定安全測試范疇,后續(xù)可結(jié)合服務(wù)器壓測,實(shí)現(xiàn)脫離客戶端對服務(wù)端測試,結(jié)合起來可進(jìn)行性能及安全相關(guān)的進(jìn)一步測試。
弱網(wǎng)絡(luò)異常部分詳解
(上、下行100%丟包超時(shí) 分別進(jìn)行如下測試,即測試內(nèi)容*2)
測試過程
超時(shí)處理、恢復(fù)網(wǎng)絡(luò)再次請求、多次請求后恢復(fù)網(wǎng)絡(luò)
- 超時(shí)處理
超時(shí)處理是指驗(yàn)證游戲從斷網(wǎng)開始到觸發(fā)斷線重連到恢復(fù)的整個(gè)過程,一般情況表現(xiàn)為:一定時(shí)間后提示斷網(wǎng)(圖標(biāo)或者tips),后進(jìn)入自動(dòng)重連狀態(tài)(后臺(tái)重連幾次,前臺(tái)無明顯表現(xiàn)),超出設(shè)定重連次數(shù)還失敗則彈出提示框(回到登錄頁面或檢查網(wǎng)絡(luò))
測試點(diǎn):檢查各功能是否表現(xiàn)一致
風(fēng)險(xiǎn)點(diǎn):不同的功能不同的人做,特別是非戰(zhàn)斗和戰(zhàn)斗功能,戰(zhàn)斗有可能有特殊重連處理,會(huì)互相影響,導(dǎo)致表現(xiàn)不一致或其他問題。(籃球出現(xiàn)過:戰(zhàn)斗中沒有斷網(wǎng)提示,重連邏輯互相影響)
- 恢復(fù)網(wǎng)絡(luò)再次請求
斷網(wǎng)過程理解:一般情況下從斷網(wǎng)開始到重連有3個(gè)階段,1是還在等待中(還在判定是否超時(shí)觸發(fā)斷線重連的閾值時(shí)間內(nèi)),2是斷線重連中(超出判定閾值),3是已經(jīng)斷線重連后
測試點(diǎn):
恢復(fù)再次請求在不同的狀態(tài)下進(jìn)行表現(xiàn)不一樣,具體如下:
上行丟包:等待中恢復(fù),操作會(huì)生效(√)
上行丟包:斷線重連中恢復(fù),操作不生效(×,因?yàn)橄]有發(fā)出去)
上行丟包:斷線重連后,操作生效(√)
下行丟包:等待中恢復(fù),操作會(huì)生效(√)
下行丟包:斷線重連中恢復(fù),操作會(huì)生效(√)
下行丟包:斷線重連后,操作會(huì)生效(√)
風(fēng)險(xiǎn)點(diǎn):上、下行丟包超時(shí)異常時(shí),如果狀態(tài)不一致,會(huì)導(dǎo)致前后端狀態(tài)不一致,再次進(jìn)行操作無法操作或數(shù)據(jù)異常。上行丟包出異常大概率是狀態(tài)存在客戶端,下行丟包出異常大概率是客戶端沒有刷新狀態(tài)。
(如:新手引導(dǎo),下行丟包點(diǎn)擊下一階段,服務(wù)端狀態(tài)已經(jīng)進(jìn)入下一階段,客戶端無法刷新狀態(tài),則會(huì)卡死在當(dāng)前界面;
領(lǐng)獎(jiǎng),下行丟包點(diǎn)擊領(lǐng)獎(jiǎng),服務(wù)端狀態(tài)已經(jīng)領(lǐng)取,客戶端如無法刷新狀態(tài),則會(huì)顯示未領(lǐng)獎(jiǎng)但是無法領(lǐng)取;)
- 多次請求后恢復(fù)網(wǎng)絡(luò)
是指重復(fù)發(fā)送請求,主要是為了驗(yàn)證服務(wù)端邏輯。
原理:多次重復(fù)請求,發(fā)送同樣的請求,檢查客戶端、服務(wù)端是否有去重處理,服務(wù)端邏輯是否正確。
測試點(diǎn):
舉例:
斷網(wǎng)了點(diǎn)擊沒反應(yīng),可能點(diǎn)了10次購買按鈕(意味著發(fā)了10次請求),恢復(fù)網(wǎng)絡(luò)后,查看結(jié)果。
測試點(diǎn):第1是否買了10次,第2是否扣錢正確。(玩家期望:只買了1次,扣了1次的錢正確)
異常情況:響應(yīng)了10次,買了10次(沒有丟棄重復(fù)請求),扣錢只扣了1次(為什么扣1次,服務(wù)端判定錯(cuò)誤)。
分析:當(dāng)服務(wù)器使用錯(cuò)誤緩存數(shù)據(jù)或者客戶端數(shù)據(jù)做驗(yàn)證時(shí),下行丟包超時(shí)情況下,客戶端請求消息一直是一樣的(如:10000塊錢買個(gè)1000的東西),服務(wù)端使用前端數(shù)據(jù)判定,則10次請求每次都是10000塊錢買1000的東西,最后買了10次剩余9000塊錢。
正常情況:
1符合邏輯的表現(xiàn):響應(yīng)10次,扣了10次錢,買了10個(gè)東西(第1次買完剩9000,第2次買完剩8000,10次買完剩0元。。。)
2符合體驗(yàn)的表現(xiàn):正常處理應(yīng)該只響應(yīng)1次(沒反應(yīng)習(xí)慣性一直點(diǎn),避免玩家誤操作扣錢),服務(wù)端判定扣除貨幣且數(shù)據(jù)正確(買1個(gè)東西,剩余9000)。
流程圖:
總結(jié)
- 上一篇: foobar2000 用了那么久 才学会
- 下一篇: 无线传感器网络