本文轉(zhuǎn)自: 騰訊WeTest專欄--《手游與App測試四大區(qū)別》
隨著智能設(shè)備的普及和移動(dòng)互聯(lián)網(wǎng)的興起珊豹,各家互聯(lián)網(wǎng)巨頭紛紛在往移動(dòng)端布局和轉(zhuǎn)型簸呈,同時(shí)初創(chuàng)的移動(dòng)互聯(lián)網(wǎng)公司也都盯著這個(gè)市場希望分一杯羹。在這個(gè)大環(huán)境下店茶,互聯(lián)網(wǎng)的重心已經(jīng)慢慢從Web端轉(zhuǎn)向了移動(dòng)端蜕便,而移動(dòng)端的軟件測試也變得越來越重要了。
在移動(dòng)端的軟件里贩幻,手游又是其中非常大的一塊轿腺。從下面的圖可以看出,智能手機(jī)的普及和手游玩家的增長是密切相關(guān)的:
加入鵝廠前丛楚,筆者曾經(jīng)從事過手機(jī)App的測試開發(fā)工作族壳。1年前加入鵝廠后轉(zhuǎn)行做了手游測試工作,通過摸索實(shí)踐趣些,發(fā)現(xiàn)兩者在相同的測試?yán)碚摶A(chǔ)之上仿荆,其實(shí)有著非常不同的測試場景和測試需求。下面就為大家整理一下其中的基礎(chǔ)部分坏平,涵蓋了兩者在手工和自動(dòng)化測試方面的不同拢操,希望能幫到想從App測試轉(zhuǎn)到手游測試的朋友們。
1 APP自動(dòng)化測試完全不同于手游自動(dòng)化測試
手機(jī)App和手游的開發(fā)技術(shù)不同功茴,這導(dǎo)致了兩者的自動(dòng)化測試技術(shù)是截然不同的庐冯。
以安卓開發(fā)舉例,手機(jī)App一般使用Android SDK開發(fā)坎穿,使用Java編寫展父。通過Android提供的服務(wù)返劲,我們可以獲取App當(dāng)前窗口的視圖信息,進(jìn)而查找和操作按鈕等控件栖茉,以完成自動(dòng)化測試篮绿,如Uiautomator。這個(gè)過程是標(biāo)準(zhǔn)化的吕漂,從技術(shù)上來說沒有任何難度亲配,因此各個(gè)公司各個(gè)App自動(dòng)化測試的方法都大同小異。
但手游的開發(fā)卻不是這樣惶凝。手游一般使用引擎開發(fā)吼虎,現(xiàn)在著名的有cocos2d和unity3d。兩者都是使用引擎自帶的語言進(jìn)行開發(fā)苍鲜,主流的分別是c++和c#思灰,雖然在開發(fā)過程中也有按鈕等控件的概念,但當(dāng)運(yùn)行時(shí)由引擎渲染后就變成了一副簡單的圖片:
? ? ? ? ? ? ? ? ? ? ? ? ? 圖:游戲中看到的只是一副簡單的圖片混滔,按鈕已經(jīng)不是控件了
因此洒疚,我們就無法通過Android自帶的服務(wù)來找出游戲中的按鈕了,也就沒法進(jìn)行常規(guī)的自動(dòng)化測試坯屿。
如果有人說自己的技術(shù)是基于Android原生控件識(shí)別的油湖,那就一定做不了手游自動(dòng)化測試。這個(gè)問題大家都在探索解決方案领跛,我們現(xiàn)在通過注入引擎SDK到安裝包反射出引擎層控件的方法進(jìn)行自動(dòng)化測試乏德,實(shí)踐下來具有很好的效果。
2 玩法不同導(dǎo)致功能測試更復(fù)雜
2.1 隨機(jī)性
游戲的場景和過程是動(dòng)態(tài)并且伴有隨機(jī)要素的吠昭,這體現(xiàn)在兩點(diǎn)鹅经。
1.你重復(fù)玩一個(gè)游戲關(guān)卡,很可能兩次出現(xiàn)敵人以及游戲過程是不同的怎诫。
2.你玩一個(gè)手游的時(shí)候不進(jìn)行操作瘾晃,敵人和周圍的場景也在時(shí)刻發(fā)生改變。
這兩點(diǎn)對(duì)自動(dòng)化測試帶來了極大的挑戰(zhàn)幻妓,如果測試腳本寫的不夠靈活蹦误,很容易導(dǎo)致上一次運(yùn)行成功的腳本這一次就無法運(yùn)行了。我們需要在測試腳本里適當(dāng)?shù)募尤胩剿骱妥赃m應(yīng)的功能肉津。
App測試就沒有這個(gè)問題强胰,大部分App的使用方式都是靜態(tài)且可以重復(fù)的。因此自動(dòng)化測試可以完全按照測試腳本進(jìn)行編寫并執(zhí)行妹沙。
2.2 探索性
手游和App的第二個(gè)玩法不同在于探索性偶洋。App一般都是功能性的,好的App需要把它的功能簡單明了地告訴用戶距糖。而游戲重在娛樂性玄窝,需要給玩家一定的探索要素牵寺。因此在做手游測試的時(shí)候,我們需要測試游戲的用戶幫助說明是否清晰恩脂,同時(shí)后續(xù)的游玩和探索過程和前面給出的說明之間是否有合理聯(lián)系帽氓,規(guī)則的指示是否有足夠的提示性。
2.3 難度測試
App希望做的越簡單俩块,用戶的使用成本越低越好黎休。而手游是有難度設(shè)置的。我們在做手游功能測試的時(shí)候玉凯,會(huì)把資源和等級(jí)調(diào)到最大以方便后期功能的執(zhí)行势腮,但當(dāng)所有的功能測試都做完后,我們需要把自己的資源初始化漫仆,以“回歸”一個(gè)普通玩家的水平嫉鲸,通過普通玩家的視角來查看游戲的難度提升是否合理,資源分配是否均勻歹啼。
2.4 關(guān)卡測試
App的使用是功能性的,一個(gè)功能的重復(fù)使用總是一樣的座菠。而手游具有關(guān)卡的概念狸眼,即便是同一種玩法,關(guān)卡和關(guān)卡之間也有細(xì)微的差別浴滴,前面的關(guān)卡測試正確了拓萌,并不表示后面的關(guān)卡一定是正確的。作者曾經(jīng)碰到過一個(gè)手游的Bug升略,當(dāng)游戲進(jìn)行到某個(gè)后期關(guān)卡時(shí)微王,游戲一定會(huì)崩潰。而導(dǎo)致這個(gè)Bug的原因也很簡單:這個(gè)關(guān)卡的圖片資源在打包客戶端的時(shí)候沒有加入品嚣。因此當(dāng)我們玩前面的關(guān)卡時(shí)并不會(huì)觸發(fā)這個(gè)Bug炕倘,但一到后面的關(guān)卡就出錯(cuò)了。
這類Bug雖然原因簡單翰撑,但確實(shí)非常難測試到罩旋。因?yàn)楦鱾€(gè)關(guān)卡的玩法雖然都一致,但一個(gè)游戲的關(guān)卡數(shù)卻是非常多眶诈。如果我們要遍歷所有的關(guān)卡走一遍涨醋,那耗費(fèi)的人力成本將是非常大的。對(duì)于這類重復(fù)性的關(guān)卡測試逝撬,建議使用自動(dòng)化腳本進(jìn)行遍歷浴骂。
2.5 PvP測試
App的使用普遍是單人的,而手游往往有玩家對(duì)戰(zhàn)的PvP模式宪潮,好的手游更是具有實(shí)時(shí)的PvP模式溯警。由于兩個(gè)玩家實(shí)時(shí)進(jìn)行游戲合作或者對(duì)戰(zhàn)趣苏,因此網(wǎng)絡(luò)延遲的測試就變得非常關(guān)鍵了。我們在測試中需要模擬不同的網(wǎng)絡(luò)對(duì)游戲延遲的影響愧膀,觀察兩個(gè)玩家的狀態(tài)和數(shù)據(jù)是否一致拦键,同時(shí)體驗(yàn)網(wǎng)絡(luò)延遲對(duì)游戲手感的影響,這在傳統(tǒng)的App測試中是完全不需要的檩淋。
3 手游測試更看重商業(yè)類測試
3.1 支付測試
現(xiàn)在的手機(jī)App基本上以廣告收入為主芬为,并不會(huì)直接向用戶收取費(fèi)用。而手游的直接消費(fèi)群體就是玩家蟀悦,在游戲過程中伴隨著玩家大量的支付操作媚朦。由于這類操作和玩家的金錢密切相關(guān),因此支付類的測試在任何游戲中都要做最高優(yōu)先級(jí)的保證日戈。
我們需要在各種嚴(yán)格的環(huán)境下保證玩家的支付操作被正確執(zhí)行或者得到了正確的失敗提醒询张。例如當(dāng)網(wǎng)絡(luò)狀況很差的時(shí)候,用戶在支付界面的多次確認(rèn)操作必須只能被執(zhí)行一次浙炼。當(dāng)用戶在支付過程中斷網(wǎng)份氧,未收到貨物時(shí),游戲需要在玩家的網(wǎng)絡(luò)恢復(fù)后第一時(shí)間補(bǔ)發(fā)貨物弯屈,并作出明顯的提示蜗帜。另外支付操作需要在大量不同系統(tǒng)、不同型號(hào)的手機(jī)上進(jìn)行適配操作资厉,以降低出錯(cuò)的可能性厅缺。
3.2 安全測試
對(duì)于大多數(shù)非支付類App來說,安全并不是一個(gè)特別大的問題宴偿,只需要保證登錄鑒權(quán)的安全性即可湘捎。App是一個(gè)方便用戶的工具,沒有人會(huì)在用自己的計(jì)算器App時(shí)候鎖定內(nèi)存窄刘,或者把加法操作變?yōu)槌朔ú僮鳌?/p>
手游在這點(diǎn)上很不一樣窥妇,手游與玩家在某種程度上具有“對(duì)抗”要素,玩家要戰(zhàn)勝游戲關(guān)卡獲得獎(jiǎng)勵(lì)娩践,而游戲關(guān)卡要設(shè)置一定的難度阻止玩家秩伞。如果游戲的外掛橫行,玩家不需要任何對(duì)抗就能獲得勝利欺矫,一方面會(huì)對(duì)游戲的平衡性造成影響纱新,使得某些玩家的資源大大超過別的玩家;另一方面從長遠(yuǎn)看會(huì)使得這個(gè)游戲變得無趣穆趴,從而造成玩家的離開脸爱。
對(duì)游戲進(jìn)行安全測試的普遍方法為通過鎖定/修改內(nèi)存來鎖定和修改游戲資源、通過修改游戲內(nèi)存來改變游戲邏輯簡化游戲流程等未妹。
3.3 收益測試
一般的手游App沒有付費(fèi)用戶的概念簿废,所有的用戶都是使用同一個(gè)功能空入。即便有付費(fèi)用戶,他們和普通用戶的區(qū)別也非常明顯:付費(fèi)用戶可以使用一些額外功能族檬。手游的付費(fèi)用戶和非付費(fèi)用戶的界線并沒有這么明顯歪赢。手游里根據(jù)用戶付費(fèi)的多少分為非R用戶,小R用戶,大R用戶等。我們需要在策劃的時(shí)候就計(jì)算好這些付費(fèi)用戶的投入和回報(bào)脆诉,并在測試的過程中驗(yàn)證這些。舉兩個(gè)例子白对,如果一個(gè)大R用戶獲得的回報(bào),非R用戶只用很少的時(shí)間就能獲得换怖,那大R用戶一定不滿意甩恼,這個(gè)收費(fèi)項(xiàng)目的設(shè)置就是不合理的;如果兩個(gè)購買項(xiàng)的金額相同沉颂,而收益明顯不同条摸,那也會(huì)造成玩家的不滿。
4 后臺(tái)性能不同
雖然我們這里討論App和手游主要是前端客戶端铸屉,但其實(shí)兩者的后臺(tái)性能也有區(qū)別钉蒲。相比一般的App,手游的在線人數(shù)明顯更有規(guī)律性且更集中抬探,一般在中午12點(diǎn)和晚上8點(diǎn)是兩個(gè)明顯的高峰。因此手游的性能測試就要貼合這種用戶模型帆赢,能夠處理極值情況下的服務(wù)器性能負(fù)載小压。當(dāng)然,兩者都會(huì)受到節(jié)假日較大的影響椰于,這個(gè)對(duì)于App和手游來說是一致的怠益。
也來談下相似之處
除了上面提到的這么多手游測試和App測試的不同點(diǎn),其實(shí)兩者也有很多相似之處瘾婿,在測試的時(shí)候都不能遺忘蜻牢,例如手機(jī)來電、短信的中斷測試偏陪,碎片化的兼容性測試(尤其是安卓)抢呆,客戶端運(yùn)行在手機(jī)上的性能測試,網(wǎng)絡(luò)較差或者網(wǎng)絡(luò)頻繁切換的弱網(wǎng)絡(luò)測試笛谦,已經(jīng)用戶體驗(yàn)和UI測試等抱虐。