騰訊技術專家線上答疑專場又來啦!騰訊互娛WeTest測試專家張得俊、孫大偉,針對大家提出的關於兼容測試、性能測試、安全測試、弱網絡測試、Crash測試等問題,進行了全方位解答。小編為大家整理了部分精彩問答,點擊閱讀原文,可以查看全部問答哦!
Q:Unity手遊切換到手機後端以後,經常會出現莫名其妙的問題?如何更好的測試這些問題?
張得俊:Unity遊戲切換到後臺以後,主線程和協程都不會繼續運行,但是通過腳本開啟的線程會繼續運行,建議重點關注線程是否有切到後臺的處理邏輯。此外,有些手機會對後臺程序進行一定限制,比如關閉網絡功能等,也需要關注。
Q:棋牌遊戲有極小概率出現閃退,有什麼方法快速定位閃退原因?
張得俊:這種問題只能通過Crash監控上報的方式,沒有其他特別好的方法。同時,也考慮可以加入在線性能監測,比如說WeTest的APM,有部分閃退,可能是因為手機性能較差,APK又佔有較大內存,引起的am_low_memory,導致系統殺死應用。
Q:有時候有玩家在戰鬥中感覺到卡頓,有回拉現象。我們一般總結為該玩家網絡不好,但是該玩家自己測試說,玩別的同類遊戲時不會發生這種現象,測試自己家網絡也很快。我們自己測試並沒有遇到這種情況,請問有什麼辦法能測試到這種現象的發生?
孫大偉:不知道是不是像你說的「回拉現象」是不是像魔獸世界那種,比如人物在跑,但是可能只是本地客戶端在跑,因為網絡短暫不好,客戶端不能與伺服器同步位置,伺服器上並沒有跑,當網絡恢復後,客戶端與伺服器同步後,人物回到了之前的某個點上,這種現象。
如果是這樣,建議做一下弱網絡測試,模擬一些比較差的網絡情況,先確認一下是不是網絡問題導致出現你說的回拉現象。
Q:我們公司的一款遊戲(Unity RPG手遊)研發已接近尾聲,但客戶端在某些戰鬥場景裡內存佔用飆升,退出場景後並內存沒有完全釋放,如此幾個來回,客戶端就容易卡頓或閃退,而且詭異的是同一個包 在iPhone6上最好復現,iPhone5上卻很少出現閃退。使用WeTest有辦法快速定位問題嗎?
張得俊:WeTest平的的UPA工具可以解決絕大部分Unity遊戲的內存問題。Unity內存優化一般從資源內存和腳本內存(Mono內存)兩部分入手,資源內存較高主要是因為資源的尺寸不合理(比如紋理太大),或者資源的卸載不及時,UPA工具提供了資源分析功能,可以輸出資源的尺寸、生命周期及卸載情況。Mono內存較高主要是因為腳本裡面分配了一些較大的對象沒有釋放,UPA工具提供了Mono內存分析功能,可以進行Mono內存快照的對比,並精確到函數堆棧。
Q:測試中有時會遇到一些bug,但用了很多種方式都不能重現,如何對這類bug快速定位?
孫大偉:這確實是一個比較難的問題,但也是經常要面臨的,我覺得首先要評估這個bug出現後的影響面和出現頻率,這個決定了後面需要投入多大的精力來解決它,如果這個bug影響面很小又極少出現,那我想我們可能應該把精力放到其他更重要的點上,反之我們就需要想一些辦法來解決它了。
在手工測試的過程中使用一些輔助工具,可以全程錄製測試的步驟視頻,當問題出現的時候可以自動的把軟硬體環境信息抓取出來,比如系統配置,系統性能消耗,系統日誌,Crash日誌,業務自己的日誌,被測遊戲當時性能表現等現場信息儘可能的收集全,對於偶現問題在找到重現步驟之前開發基本上只能通過這些現場信息來分析可能問題產生的原因,然後再去驗證重現並解決,在自動化測試的時候上面一些問題現場當然都是應該自動記錄並保留的。
具體分析的時候,可能也沒有一些捷徑了,根據問題現場的視頻日誌堆棧,分析代碼,模擬一些因素和場景進行驗證,也可能需要一些針對性的自動化腳本,長時間去執行,以待問題復現等等。
如果是一些諸如性能之類的bug,比如內存洩露,還可以藉助一些靜態和動態分析工具可以幫助我們來加速分析進度。
先回答這麼多,可能並不全,只是我自己的一些理解,其他大神可能還有更好的辦法。
Q:棋牌遊戲如何進行弱聯網測試?
孫大偉:1、弱網環境的搭建,在內部已經有一個弱網的系統,通過在頁面上配置一些網絡的參數,比如帶寬,丟包,延遲,亂序,抖動等,這些參數的獲取主要是通過一些設備在實際環境下採集獲取的。沒有這套環境外面也有一些工具,比如微軟的network emulator for windows toolkit,還有FaceBook有一個ATC的弱網絡模擬的工具可以使用,還有其他的。
2、設定幾個要測試的弱網絡模型,比如3G高延時,請求無響應,2G高速移動等,每個模型對應著一組網絡模擬參數。
3、弱網測試用例測試,主要是一些比較關鍵的點,比如登錄,斷線重連機制,結算,支付等方面。
4、測試用例與上面幾個弱網絡模擬進行組合測試,再設計一些隨機的網絡模型組合進行測試,觀察被表現是否符合預期。
Q:怎樣進行遊戲的壓力測試?
張得俊:公司內部伺服器壓力測試主要分為三大步驟:
1. 制定測試方案
主要是體驗遊戲,理解伺服器架構,設計測試方案。要弄清楚遊戲的玩法是什麼,在什麼場景下會有比較大的壓力,比如登錄場景、戰鬥場景、聊天場景;同時要搞清客戶端和伺服器之間交互的協議,是用的長連接還是短連接,是PB還是自定義協議等,進一步定製出性能測試方案,其中包含性能基線。
2. 開發機器人&執行測試
這一步主要是開發壓測機器人,反覆進行測試。公司內部壓測,機器人都使用WeTest壓測大師,在開發之前,需要從封測數據或用戶行為的分析,構建出玩家的行為樹,通過數據開發機器人。在開發過程中,會通過伺服器日誌或者抓包的形式,填充每條協議的欄位。然後反覆進行測試,暴露伺服器的問題。
3. 數據分析
測試完成後,會根據測試數據,出一份完善的測試報告。報告包含測試結論、存在的問題、性能數據、優化建議等。
Q:能否簡述下滲透測試的學習路線?
張得俊:滲透測試就是給你一個黑盒的產品,你在沒有產品相關的內部資料的(如產品原始碼、配置檔、產品協議內容等)的條件下,完全模擬外網黑客去從零開始研究產品實現,在對產品實現有一定了解程度的基礎上找出產品的安全漏洞。
這個也沒有標準的學習路線,我覺得第一要有對各個平臺如Java虛擬機、遊戲引擎、二進位等有逆向能力,其次是漏洞分析能力,需要你對軟體的實現和架構有一定經驗,邏輯思維能力強;還有工具也很重要,針對各種語言逆向分析工具、動態調試工具,模糊測試工具也需要有和掌握。
Q:對於客戶端,騰訊內部有沒有一系列自動化工具,對於測試人員的工作又是怎麼分配的?
孫大偉:對於手遊客戶端來說騰訊內部是有一系列自動化工具的。
對於功能和兼容性來說,有基於Unity控制項的GAutomator(https://github.com/Tencent/GAutomator),還有基於圖像識別的工具;
對於性能自動來說來說,主要是通過UI自動化工具配合UPA(以前叫Cube)工具一起使用;
安全測試,內部手遊項目主要是使用SR手遊漏洞分析工具,可以自動化分析一些常見的漏洞;
其他的一些專項測試也都會有相關的自動化工具。
上面只是說的手遊,端遊也會有對應的工具鏈。
騰訊測試人員主要分為:遊戲測試,專項測試,測試開發,遊戲測試主要負責業務邏輯方面,專項測試就是負責比如壓測,安全,性能諸如此類專項測試內容,測試開發主要負責一些自動化腳本開發和工具開發,但是實際工作中界線其實並沒有這麼明顯啦,都可以做的。
Q:能否介紹一下貴方實施壓力測試的方法論以及工具?請問貴方的服務端是用java平臺還是cpp平臺的呢?
張得俊:伺服器端開發語言不做限制的,有C++、Java、PHP、Python等各種語言,但是遊戲伺服器一般以C++為主。
伺服器壓力測試方法主要分為三大步驟:
1. 制定測試方案
主要是體驗遊戲,理解伺服器架構,設計測試方案。要弄清楚遊戲的玩法是什麼,在什麼場景下會有比較大的壓力,比如登錄場景、戰鬥場景、聊天場景;同時要搞清客戶端和伺服器之間交互的協議,是用的長連接還是短連接,是PB還是自定義協議等,進一步定製出性能測試方案,其中包含性能基線。
2. 開發機器人&執行測試
這一步主要是開發壓測機器人,反覆進行測試。公司內部壓測,機器人都使用WeTest壓測大師,在開發之前,需要從封測數據或用戶行為的分析,構建出玩家的行為樹,通過數據開發機器人。在開發過程中,會通過伺服器日誌或者抓包的形式,填充每條協議的欄位。然後反覆進行測試,暴露伺服器的問題。
3. 數據分析
測試完成後,會根據測試數據,出一份完善的測試報告。
報告包含測試結論、存在的問題、性能數據、優化建議等。
以上就是本場答疑的精選問答啦!想回顧其他騰訊技術專家答疑專場,可點擊下方文字前往:
騰訊技術專家答疑專場:遊戲中的人工智慧
騰訊技術專家答疑專場:網路遊戲同步技術
加小編微信,享雙重福利
1.加入GAD程序猿交流群,獲取行業乾貨;
2.領取60G騰訊內部分享等獨家程序資料。