1. 程式人生 > >H5遊戲效能測試工具選擇與實踐總結

H5遊戲效能測試工具選擇與實踐總結

概要

本文會對本人在使用白鷺做h5遊戲進行效能測試的過程送使用的工具做一些簡單記錄。
包括 記憶體,cpu,耗電,啟動時間,網路監控,弱網路,流量幾個方面介紹。

背景

玩吧提測有一個性能需要求列表。需要每項指標達到要求。
測試效能基於公司專案的遊戲,使用遊戲引擎是egret,在android端是使用的webview載入遊戲連結來展示遊戲的方式。

效能要求列表

專案 指標
記憶體 1.遊戲內反覆切換tab,切換場景,滑動頁面等場景不存在記憶體洩露,給出資料並說明結論; 2.執行過程中記憶體峰值<單個應用程式最大可能記憶體的60%;3.退出遊戲後記憶體恢復到進入遊戲前的佔用值;
電量 程式放後臺或處於飛航模式的情況下耗電小於10mAh;
流量 無異常流量消耗;不存在資源的重複拉取;
弱網路 1.無crash;2.體驗方面提示使用者網路環境差;3.拉取失敗能正常返回;
cpu CPU 啟動時cpu佔比<20%;執行時cpu佔比峰值<80%;
Crash 網路/網路狀態發生變化時/連續8小時執行,無crash;
流暢度 avgFPS不小於40;inFPS大於0;
開啟速度 (從空間“正在進入遊戲”頁面消失開始算,到使用者看到遊戲介面為止)分ios/andriod 社交類遊戲(指消除類、益智類等小遊戲)首次啟動時間,分wifi/3G/2G網路,wifi和3G下小於2秒,2G下小於8秒非首次啟動時間,分wifi/3G/2G網路,wifi和3G下小於1.5秒,2G下小於6秒;中度重度遊戲(指卡牌、RPG等題材類遊戲)首次啟動時間,分wifi/3G/2G網路,wifi和3G下小於3秒,2G下小於10秒非首次啟動時間,分wifi/3G/2G網路,wifi和3G下小於2秒,2G下小於7秒

需要檢查項

1. 記憶體
2. cpu佔用
3. 耗電監控
4. 啟動耗時監控
5. 網路
6. 流量監控

記憶體

方法一:TBs hybrid h5除錯

這裡寫圖片描述

這裡寫圖片描述

手機qq,空間,微信,開啟 http://debugx5.qq.com , 點“資訊”,”是否開啟TBS核心inspector 除錯功能”,
android手機usb連電腦,chrome ,chrome://inspect/#devices.
手機上開啟h5介面,,在chrome裡找到對應的手機的webview,點inspect開始除錯。
(可以通過timeline來檢視和儲存,也可以通過profile中,heap snapshot的方式擷取對比記憶體檢視是否記憶體洩露,也可以進行data的dump )
(可分析js函式記憶體使用) (

https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/timeline-tool?hl=zh-cn)

這裡寫圖片描述

Summary 檢視可以顯示按建構函式名稱分組的物件。使用此檢視可以根據按建構函式名稱分組的型別深入瞭解物件(及其記憶體使用)。此檢視特別適用於跟蹤 DOM 洩漏。
Comparison 檢視可以顯示兩個快照之間的不同。使用此檢視可以比較兩個(或多個)記憶體快照在某個操作前後的差異。檢查已釋放記憶體的變化和參考計數讓您可以確認是否存在記憶體洩漏及其原因。
Containment 檢視允許您探索堆內容。此檢視提供了一種更好的物件結構檢視,有助於分析全域性名稱空間 (window) 中引用的物件以找出是什麼讓它們始終如影隨形。使用此檢視可以分析閉包以及在較低級別深入瞭解您的物件。
Dominators 檢視可以顯示支配樹,並且對於查詢聚集點非常有用。此檢視有助於確認對物件的意外引用已消失,以及刪除/垃圾回收正在執行。

感受:
優點是因為騰訊的瀏覽器是基於chrome核心的優化,所以可以進行遠端debug除錯,可以記錄一段時間內記憶體,使用情況,calltree, js函式的耗時等等..
缺點是因為遊戲是在qq或者玩吧中的,screenshot沒法截到遊戲中螢幕,而且除錯如果是record記錄某一段時間內操作的情況,會比較卡,並不能記錄fps情況.

方法二:android studio

通過android studio run app ,
Mat是在eclipse上也有,類似的profiler ,也有cpu記憶體佔用百分比,也可以實時顯示手機螢幕上的截圖,但是感覺更適用與專門的android原生應用,
Mat android studio 裡是android studio monitor
而我們遊戲是用的webview上載入遊戲的方式,沒法看到一些js函式呼叫的情況
這裡寫圖片描述
感受:
優點是, 然後在下面的android profiler中可以看到real-time圖表,可以通過滑鼠滑動找到某一幀的記憶體cpu,network情況
缺點是,不能擷取某段時間的資料,並且匯出,android device monitor 中的東西分析android原生應用還挺有用的,web view里加載個東西的似乎看不出啥來

方法三:Dumpsys

可以檢視手機上所有程序記憶體佔用大小的工具,
eg:
adb shell dumpsys meminfo 取所有的佔用記憶體大小
adb shell dumpsys meminfo pakagename or Pid ( com.jidiangame.sanguo) com.tencent.mobileqq)看詳細的記憶體
adb shell getprop|grep heapgrowthlimit 檢視最大記憶體限制
可以配合watch 來檢視, watch -n 5 dumpsys meminfo com.jidiangame.sanguo
這裡寫圖片描述

我測試時候使用的測試機器是vivox9s , 記憶體大小[dalvik.vm.heapgrowthlimit]: [256m]

有一條是遊戲佔用檢視最大堆記憶體的60%,我用adb shell getprop|grep heapgrowthlimit 來檢視最大記憶體大小,結合剛才的應用記憶體大小來比較
從一本書上看到最大記憶體的解釋,在虛擬機器中,android系統給heap 堆記憶體設定了一個最大值,
App不可能完全使用1g,2g的記憶體,系統會分給一小部分,一個重要原因是android預設沒有虛擬記憶體
為了保證極端情況下,前臺app和系統還能穩定執行,就只能靠low memory killer 機制
App消耗記憶體過大導致的在手機剩餘記憶體低於記憶體警戒線的時候,就會用low memeory killer ,
App佔用記憶體越多,被處理掉的機會就越大
Low memory killer 是 out of memory 機制的優化

擴充套件閱讀: 什麼是dumpsys?

Dumpsys 是android上提供資訊的系統服務,
通過adb 在命令列下獲得所連裝置的診斷輸出,會輸出很多,可以用選項過濾出想要的,包括ram , battery ,network

這裡寫圖片描述

cpu佔用

方法一:android studio

用android studio 的android profiler 直觀看cpu佔用百分比
這裡寫圖片描述
自己在使用的時候沒有辦法匯出資料。所以沒有使用.

方法二:dumpsys

adb shell dumpsys cpuinfo 獲取cpu佔比
這裡寫圖片描述
我就是用這個記錄的

方法三:chrome profiler

使用chrome profiler 從timeline中檢視cpu佔用情況
Cpu佔用似乎只能看到大概,沒有具體數值,可以看到具體什麼函式,或者網路請求消耗的時間

這裡寫圖片描述

擴充套件閱讀: Emmagee

可以檢測cpu , memory ,network ,battery ,如果root還可以看到堆大小,還有自定義收集資料的時間間隔
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
感受:
過程大概是,在手機中安裝apk,然後選擇想要測試的app,然後點開始,跳轉到程式,然後結束時候,切迴應用,點結束。會在本目錄底下生成一個數據檔案,然後excel檢視就行了。
Emmagee 的github

耗電監控

方法一:developer tools for battery usage

Android 5.0提供的工具: adb shell dumpsys batterystats
1.手機連線pc,pc上執行 adb shell dumpsys batterystats —reset ,清空記錄
2.斷開手機與pc連線,進行需要檢測的步驟
3.重新連線手機和pc, 執行adb shell dumpsys batterystats —charged
4.找到Estimated power use (mAh): 可以粗略的檢視應用耗電
這裡寫圖片描述
這裡寫圖片描述
從下面根據包名找到對應應用的uid是多少,再從上面去找對應的耗時.
感受:
並不是很精確,手動插拔會有一些誤差。

方法二:Battery Historian

(用到了上面的命令,有資料分析和視覺化的圖表,流程稍多點,沒搞)
有興趣可以看看
Google提供的一個工具,在github上,使用了android 的那個命令,有資料分析和視覺化的圖表
這裡寫圖片描述

啟動耗時監控

方法一:

根據需求,應該肉體測試就可以測出來了…用眼看。。卡個秒錶啥的。。。

方法二:chrome profiler

直接load遊戲連結,沒通過玩吧,因為在qq內啟動遊戲之前沒法inspect去做record操作,只有點連線才會有一個webview
使用chrome 測試
1.獲取h5入口url,
2.手機chrome開啟空白標籤
3.pc上開啟chrome, chrome://inspect , 找到對應的手機和空白標籤,點inspect,進入dev tools
4.找到timeline(新的是performance),點record按鈕,同時手機里加載url.
5.等遊戲出來了就可以點record關閉記錄。
6.檢視記錄,summary中可以看到loading的時間,也就是載入html的時間。event log中也可以看到loading的。

這裡寫圖片描述

網路

工具

1:Fiddler

(windows上的一個工具,mac上沒有,我用的mac所以沒研究。公司有測試同學入行前是經過某培訓的。。。據說是都教過)

2:Whistle

基於Node實現的跨平臺web除錯代理工具,類似的工具有Windows平臺上的Fiddler,主要用於檢視、修改HTTP、HTTPS、Websocket的請求、響應,也可以作為HTTP代理伺服器使用,不同於Fiddler通過斷點修改請求響應的方式,whistle採用的是類似配置系統hosts的方式,一切操作都可以通過配置實現,支援域名、路徑、正則表示式、萬用字元、通配路徑等多種匹配方式,且可以通過Node模組擴充套件功能。
這裡寫圖片描述
Whistle的github

3:Wireshark

Wireshark是一個免費開源的分析工具,用於網路的問題定位,分析,通訊協議開發。
是個跨平臺的,最新版使用qt實現。用pcap抓包,有各種平臺的,還有終端版
這裡寫圖片描述
Wireshark的可以看看

4:弱網路測試(Augmented Traffic Control (ATC))

在檢查專案中,包括平常測試,都需要進行弱網路的測試,這個ATC就可以模擬弱網路,提供測試.它是facebook的一個開源專案
Atc 是模擬網路環境的工具,可以控制裝置的網路連線,可以變換網路狀況來測試app,
可以模擬頻寬,延時,丟包,壞包,包的順序)
並沒有mac和windows版本,只有Linux版本
github地址

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

我這裡就貼一段我自己配置過程中的順序吧,這個有人專門有單獨的部落格寫更加具體的順序,我再這裡寫下來簡單的順序,方便自己以後看下。

ATC使用和配置方法:
###(1)配置:
必須是linux系統,mac和windows都不行,
在linux,電腦連著網線,然後配置一個wifi,連結上,使得android手機可以連這個網路,
   linux上安裝python2.7和Django1.10,
   安裝 ATC
pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage

建立Django 專案
django-admin startproject atcui

開啟atcui/settings.py   配置
INSTALLED_APPS = (
    ...
    # Django ATC API
    'rest_framework',
    'atc_api',
    # Django ATC Demo UI
    'bootstrap_themes',
    'django_static_jquery',
    'atc_demo_ui',
    # Django ATC Profile Storage
    'atc_profile_storage',
)

開啟 atcui/urls.py  配置
...
...
from django.views.generic.base import RedirectView
from django.conf.urls import include

urlpatterns = [
    ...
    # Django ATC API
    url(r'^api/v1/', include('atc_api.urls')),
    # Django ATC Demo UI
    url(r'^atc_demo_ui/', include('atc_demo_ui.urls')),
    # Django ATC profile storage
    url(r'^api/v1/profiles/', include('atc_profile_storage.urls')),
    url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
]

更新Django的DB:
python manage.py migrate

然後run atc (啟動後一個放著):
sudo actd —actd-lan wlp7s0 —atcd-wan enp17s0    (lan wan  通過ifconfig 檢視網絡卡名字是多少)

然後 run server :
python manage.py rumserver 0.0.0.0:8000

然後在android手機上,瀏覽器開啟
http://192.168.0.174:8000     (ip從ifconfig中去找地址)

新增sample 的profiles
獲取方式如下
apt-get install git
git clone https://github.com/facebook/augmented-traffic-control.git
apt-get install curl
cd augmented-traffic-control
utils/restore-profiles.sh localhost:8000


###(2)使用方法:
 連結對應測試wifi:

然後在android手機上,瀏覽器開啟
http://192.168.0.174:8000

點profiles標籤可以選擇已經匯入的配置項
具體如何選擇:

turn on   //開啟
select   //選擇
update Shaping  //更新,選擇網路之後,點選更新
turn off  //關閉

感受:
看了上面的配置過程就知道很麻煩。。。。當時弄了一天,這麼長的配置中間肯定會遇到點問題。用起來還行,可以隨意配置一些引數,他有sample的引數可以直接使用,但是國內外網路還是不一樣的。

弱網路測試方法2:chrome profiler

上面的這種配置方式,相當於sever的那臺電腦限制了流量,然後連上的手機,整體進行了限制,這種方式可以對任何需要聯網的平臺遊戲或應用進行測試。
蛋如果僅僅是h5並且想用網頁進行限制,而不用真機的話,可以用chrome 的profiler

在Performance 中選擇network模式,也可以自定義,修改下載,上傳速度和延遲延遲大小
這裡寫圖片描述
這裡寫圖片描述

補充工具 Snapdragon Profiler

在參加高通的一個講座上看到的
Analyze CPU, GPU, DSP*, memory, power, thermal, and network data metrics

擁有功能有: real-time , trace capture , snapshot capture ,

要求:
1.比較新,需要高通驍龍820以上才行
2.需要android N ,或者 一個支援vulkan的android 6.0裝置,

我下載的最新的profiler在我的mac上。。。。居然閃退。。沒有做嘗試了,這裡只是介紹下,在講座上看演示還是挺好的。大概功能其實跟chrome的類似。但是它可以通過android機器,看到更多底層的東西,更適合android native的app 或者遊戲用。

這裡寫圖片描述
這裡寫圖片描述

可以看到當前渲染的texture的 資源

流量測試

是否有重複拉取簡單的方法是用chrome的network工具,一直開著,看有沒有重複載入的圖片,重複載入的有可能是頭一回沒下載下來,沒存在記憶體裡,會反覆拉取。
chrome profiler的network右下角,可以看到

最後自己總結

發現之前的工具基本上分為兩類
大廠的profiler 更全面(chrome , android studio ,Snapdragon ),滿足基本的需求,且功能強大
其他的工具,個人或組織維護,對專門的領域更細緻,可選項更多一些,有的可以自己定製,滿足一些特殊需求

文中引用到的一些書籍的內容
* 《Android 應用效能優化最佳實踐》 *
* 《Android 移動效能實戰》 *
* 《騰訊Android 自動化測試實踐》 *
還有一些參考的部落格當時沒有記錄。。。抱歉

本文意圖記錄我在探索h5遊戲測試效能工具時親自用了,或者沒有親自測試但是可以推薦的工具。
具體工具使用,這裡只是做了概要描述,而不意在著重贅述工具細節。有很多部落格對具體工具做了更加詳實的記錄和介紹。可以網上找找。