動機
這篇文章的目的是為了給懶人一個快速測試Android應用的方法. 能夠在不多的時間內更有效率的發(fā)現(xiàn)移動應用的性能問題.
準備
在進行測試之前, 首先要確認一下是否已經準備好了所需要的工具:
- 待測應用(最好是debug版本)
這個不必多說, 功能不完備, 或者還存在突出功能bug的應用還是先修好再測試吧. 需要非混淆的debug版本是為了測試內存泄露.
- Android SDK 工具
Android SDK中提供了各種各樣的工具, 我們可能會需要:
- adb
- DDMS
- hprof-conv (轉換ddms上dump下來的prof文件用)
- 抓包工具Fiddler/Charles/Wireshark (會一種就可以)
- Android Studio
- MAT
- Uiautomator Viewer
開始測試
CPU占用
既然是快速測試,我們只關注一個點: 靜默時的內存消耗
你可以進入自己想要測試的畫面, 反復操作幾次, 放置一段時間, 不需要太長, 半分鐘就可以. 然后觀察CPU的消耗.
如果對于數據展示不挑剔的話, 可以使用top命令:
adb shell "top -n 50 -d 1 | grep my.app.packagename$"
my.app.packagename是待測應用的包名
-n 參數代表輸出行數
-d 參數代表輸出的間隔
這段命令就是用top命令打印出來 my.app.packagename 這個包的cpu占用和內存使用情況, 每隔1秒, 打印出來一條, 一共輸出50條
如果發(fā)現(xiàn)CPU的在應用的idle狀態(tài)下仍然持續(xù)占用, 就說明是程序的bug了.
Android Studio中集成了CPU的觀察工具, 如果是debug包, 可以通過Android Studio上的CPU窗口直觀的觀察CPU占用情況.
內存泄露
內存泄露是Android開發(fā)上很容易發(fā)現(xiàn)的問題. 可以集成第三方的泄露工具進行監(jiān)控. 也可以使用DDMS + MAT(Eclipse Memory Analyser Tool) 進行分析. 需要debug且最好非混淆的apk包.
具體步驟:
- 從手機上進入應用, 進入要測試的頁面, 進行操作. 這里建議同樣的操作反復執(zhí)行2~3次.
- 打開DDMS, 通過USB連接手機. 操作結束后GC 1~2次. 然后dump prof文件.
- 使用 hprof-conv 轉化 prof 文件, 例如, 轉換 xxx.prof 文件為 result.prof文件
hprof-conv xxx.prof result.prof
- 使用MAT打開轉換后的prof文件. MAT會自動分析文件, 然后會提示你選擇何種類型的報告, 不用選擇任何形式的報告, 直接cancel.
- 點開 Histogram 在 Class Name 欄搜索 "activity". 搜索的結果上, Objects列不為1的對象就是泄露的對象.
流量占用
移動端的流量使用盡可能小, 接口調用次數盡可能少, 網絡圖片盡可能小, 數據傳輸不要太大.
通過抓包工具進行抓包. 抓到的結果中:
- 查看總的流量, 一般不要太大. 打開單個頁面不宜超過 400KB. 因為3G下我們的網速可能會在50KB~80KB 之間, 使用5秒鐘以上打開一個頁面, 體驗不會好.
- 查看單個鏈接, 不應該有重復的鏈接.
- 觀察圖片大小, 單張圖片超過 50KB 都需要我們給與足夠重視.
- idle狀態(tài)下是不是會有持續(xù)的網絡傳輸. 如果有, 就應該仔細調查一下.
圖層
使用Uiautomator Viewer觀察視圖結構, 越復雜描畫代價越高.
總結
性能測試包含其實很廣, 也涉及到比較深入的內容. 本文希望能夠通過盡量簡單的步驟, 讓每個人都能快速的發(fā)現(xiàn)應用瓶頸.