設(shè)計(jì)初衷
大勢(shì)所逼
眾所周知,區(qū)別于HTTP之類的協(xié)議,由于tcp協(xié)議包體通信的高度定制化導(dǎo)致業(yè)內(nèi)基本沒(méi)有通用的接口工具用于游測(cè)人員進(jìn)行日常使用,大部分的情況是基于這種狀態(tài)下只能進(jìn)行測(cè)試工具定制。在日益興盛的游戲行業(yè)中,對(duì)于游測(cè)的各種測(cè)試維度的要求也在逐步增長(zhǎng),而接口測(cè)試,也就是常規(guī)所說(shuō)的協(xié)議測(cè)試在日常的測(cè)試工作中重要性和占比也是高居不下,畢竟直接關(guān)系到游戲的營(yíng)收和壽命,從而在自我折磨的道路上越走越遠(yuǎn)。
難點(diǎn)與破局
- 高度定制化:由于tcp在游戲內(nèi)應(yīng)用的特性,在協(xié)議的約定上面就必定存在各種各樣的特殊設(shè)定,常見(jiàn)的有字段類型-int、string、array之類和定制類型、字段位數(shù)、包體預(yù)留位乃至加密字段等等。所以要去模擬協(xié)議和解析協(xié)議就必須要實(shí)現(xiàn)一套與雙端(C/S)一致的封包和解析機(jī)制;
- 不可避免的自動(dòng)生成:由于需要定制解析和封包,所以必須要面臨的一個(gè)問(wèn)題就是要構(gòu)造出所有協(xié)議的封包和解析方法,而這個(gè)時(shí)候面對(duì)整個(gè)游戲項(xiàng)目下的協(xié)議處理,手寫方法明顯是不現(xiàn)實(shí)且成本巨大的。因此必須要根據(jù)公司或者項(xiàng)目組內(nèi)的生成方式再一模一樣復(fù)刻出雙端協(xié)議封包和解析的自動(dòng)生成方法(PS:當(dāng)然如果測(cè)試權(quán)限夠或者公司內(nèi)部有單獨(dú)的測(cè)試版本可供使用-即測(cè)試可以直接改造游戲代碼的話就不用重復(fù)造輪子了);
- 測(cè)試定制化:測(cè)試工具做出來(lái)肯定是為了給測(cè)試服務(wù)的,所以測(cè)試用途、便利性、功能拓展方面也需要有充分的考慮。以常規(guī)的協(xié)議測(cè)試舉例:測(cè)試人員通過(guò)wireshark之類的工具抓取到協(xié)議包,提取到data包之后,再通過(guò)對(duì)照協(xié)議規(guī)則進(jìn)行對(duì)應(yīng)數(shù)據(jù)提取,提取出來(lái)后再對(duì)數(shù)據(jù)進(jìn)行編解碼從而得到可讀的數(shù)據(jù),然后才能進(jìn)行數(shù)據(jù)驗(yàn)證,判斷協(xié)議數(shù)據(jù)是否正常。在這個(gè)流程上面就能提取到多個(gè)工具的測(cè)試用途需求:協(xié)議抓取、協(xié)議解析、可視化,同時(shí)延伸出:協(xié)議攔截、特定協(xié)議抓取、二次封包、包體構(gòu)造轉(zhuǎn)發(fā)等等;
- 承上啟下-破局:基于完整的解析機(jī)制下的壓測(cè),已經(jīng)存在上述機(jī)制之后,批量真實(shí)登錄不是夢(mèng),用于服務(wù)端場(chǎng)景壓測(cè)、登錄壓測(cè)等等用途也是順勢(shì)而為;接口測(cè)試自動(dòng)化開(kāi)展,基于協(xié)議攔截和包體封裝的機(jī)制可以輕松實(shí)現(xiàn)協(xié)議錄制,然后輔以自動(dòng)化測(cè)試框架pytest+allure即可逐步實(shí)現(xiàn)接口自動(dòng)化。
工具構(gòu)想
工具開(kāi)發(fā)歷程(記錄走過(guò)的彎路<O…O>):簡(jiǎn)易測(cè)試客戶端–>游戲內(nèi)置可視化工具–>接口代理工具。
提效是測(cè)試第一生產(chǎn)力(順便創(chuàng)造摸魚空間,emm,順便…)
-
簡(jiǎn)易測(cè)試客戶端:作為最初版的接口工具,它的初衷往往是樸素的,當(dāng)時(shí)由于組內(nèi)測(cè)試人員較少(emm,沒(méi)錯(cuò)就在下一個(gè)),加上公司體量相對(duì)較小,個(gè)人算是組內(nèi)引進(jìn)的首任測(cè)試人員,各種基建和測(cè)試方面的構(gòu)建基本都是從0開(kāi)始,所以初版的工具只是為了解決一個(gè)小小問(wèn)題:批量創(chuàng)建測(cè)試號(hào)。它的設(shè)計(jì)就是基于Python寫一個(gè)簡(jiǎn)易的客戶端用于連接游戲服務(wù)器,然后定制協(xié)議內(nèi)容根據(jù)設(shè)定的順序發(fā)送給到服務(wù)端,由于當(dāng)時(shí)缺少解析機(jī)制,全靠手寫協(xié)議解析,從而導(dǎo)致可擴(kuò)展性很差,維護(hù)成本也很高,后續(xù)在應(yīng)用時(shí)測(cè)試用途也逐步變成有限的幾種。當(dāng)前如果能加上前面所說(shuō)的全套解析機(jī)制后,就能發(fā)揮更大的作用;
-
游戲內(nèi)置可視化工具:在上一代的基礎(chǔ)上痛定思痛:手動(dòng)編碼折磨、無(wú)法支持可視化,為了避過(guò)協(xié)議解析這塊的工作(為什么不直接上解析?實(shí)在是規(guī)則太多太麻煩),調(diào)整方案改為在游戲客戶端內(nèi)搭建一個(gè)工具功能。通過(guò)對(duì)游戲客戶端內(nèi)部協(xié)議通信基類的分析,發(fā)現(xiàn)在基類的解析方法中可以很方便的攔截和抓取到明文的協(xié)議內(nèi)容,所以心生一計(jì)-‘借雞生蛋’,在客戶端現(xiàn)有的機(jī)制上增加一個(gè)測(cè)試模塊,用于獲取協(xié)議基類的通信數(shù)據(jù)同時(shí)通過(guò)unity的Gui搭建一個(gè)內(nèi)嵌的展示面板展示出協(xié)議數(shù)據(jù)和其他操作。但是這個(gè)方法面臨一個(gè)問(wèn)題就是內(nèi)嵌測(cè)試代碼到游戲主題中是一個(gè)比較大的風(fēng)險(xiǎn)項(xiàng),盡管采用的是非攔截式(即不攔截協(xié)議只收集一份)的方式,在缺少特定分割的測(cè)試環(huán)境的情況下也是有不少的風(fēng)險(xiǎn),同時(shí)內(nèi)嵌的方式意味著工具的兼容性會(huì)相對(duì)一般,針對(duì)不同項(xiàng)目要額外處理接入,另外無(wú)法支持多用戶登錄,最后在組內(nèi)討論缺少測(cè)試環(huán)境情況下,風(fēng)險(xiǎn)不可接受,該方案夭折(不過(guò)有環(huán)境和條件的同仁可以試試,業(yè)內(nèi)也有類似的做法);
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-436312.html
-
接口代理工具:為了在方案二的基礎(chǔ)上完全與游戲版本解耦,通過(guò)搭建中繼服務(wù)器來(lái)進(jìn)行協(xié)議
次處理。游戲客戶端連接中繼服務(wù)器,然后中繼服務(wù)器再連接游戲服務(wù)器,從而實(shí)現(xiàn)游戲客戶端和游戲服務(wù)端所有的通信數(shù)據(jù)都經(jīng)由中繼服務(wù)器進(jìn)行轉(zhuǎn)發(fā)處理,而中繼服務(wù)器可以對(duì)轉(zhuǎn)發(fā)的數(shù)據(jù)進(jìn)行二次的處理,并且支持可視化的需求。在此基礎(chǔ)上搭建完整的解析機(jī)制,可拓展新更強(qiáng),同時(shí)可以支持即插即用。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-436312.html
到了這里,關(guān)于基于TCP協(xié)議的游戲代理接口測(cè)試工具<一>:設(shè)計(jì)初衷與工具構(gòu)想的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!