安卓應用的性能測試,一般包括六個指標:啓動時間、內存、CPU、耗電量、流量、流暢度。html
除了耗電量,其餘五個指標的數據在咱們團隊中已經能夠經過運行腳本的方式獲取到。shell
今天給你們分享下啓動時間的腳本吧~bash
首先,咱們先明確一下安卓應用的啓動時間應該如何計算。在這裏,我給出一條命令:微信
adb shell am start -W <Package_Name>/<Activity_Name>性能
"adb shell",安卓調試橋(Android Debug Bridge),這個你們都知道,很少解釋。"am"指的是什麼呢?Activity Manager,活動管理器,經過它能夠啓動App、啓動Activity以及啓動廣播和服務等等。測試
安卓應用在啓動時都會先出現一個歡迎頁,它其實就是一個Activity。應用從被點擊到出現歡迎頁的這段時間,被定義爲啓動時間。在知道應用歡迎頁的 Activity Name 後,就能夠經過上面這條命令來獲取啓動時間。 圖中的 "TotalTime" 便是本次啓動所花費的時間,單位毫秒(ms)。ui
在知道啓動時間的測試方法後,咱們再來肯定啓動時間的不一樣場景。應用啓動時間的場景差別,主要有四個: 一、首次安裝:第一次下載應用後的啓動時長; 二、覆蓋安裝:舊版本升級到新版本後的啓動時長; 三、冷啓動:殺掉應用的全部進程後的啓動時長; 四、熱啓動:back鍵正常退出應用後的啓動時長。調試
目前,咱們團隊的啓動時間測試只包括首次安裝、冷啓動和熱啓動。code
接下來,用腳本說話吧:component
#!/bin/bash # Author: Shengjie.Liu # 安裝應用,傳入參數:apk文件的絕對地址 function install() { adb install ${1} sleep 5s adb shell input keyevent 3 } # 卸載應用,傳入參數:應用包名 function uninstall() { adb uninstall ${1} sleep 2s } # 獲取啓動時間,傳入參數:<包名>/<啓動頁活動名> function getStartupTime() { adb shell am start -W ${1} | grep -i Total | sed 's/ //g' | tr -d $'\r' | cut -d":" -f 2 sleep 2s } # 清除應用全部進程,傳入參數:應用包名 function clearApp() { adb shell am force-stop ${1} sleep 10s } # Back鍵退出應用 function quitApp() { adb shell input keyevent 4 adb shell input keyevent 4 adb shell input keyevent 4 sleep 2s } # 運行腳本後,提醒輸入APK文件地址和包名&啓動頁活動名 read -p "請輸入APK地址:" apk_address read -p "請輸入包名和活動名:" component # 截取出包名賦值給變量"package_name" package_name=$(echo ${component} | cut -d"/" -f1) echo "Package name is '${package_name}'" # 獲取首次安裝的啓動時間,重複三次,最後取平均值 install ${apk_address} starttime1=`getStartupTime ${component}` uninstall ${package_name} # 第二次 install ${apk_address} starttime2=`getStartupTime ${component}` uninstall ${package_name} # 第三次 install ${apk_address} starttime3=`getStartupTime ${component}` sleep 20s # 三次的啓動時間 echo "首次安裝時間(ms):$starttime1 $starttime2 $starttime3" # 平均值 echo "($starttime1+$starttime2+$starttime3)/3" | bc # The first installation time test is over, beginning warm boot test quitApp # 獲取熱啓動的啓動時間(同上,重複三次,取平均值) starttime1=`getStartupTime ${component}` quitApp starttime2=`getStartupTime ${component}` quitApp starttime3=`getStartupTime ${component}` quitApp echo "熱啓動時間(ms):$starttime1 $starttime2 $starttime3" echo "($starttime1+$starttime2+$starttime3)/3" | bc # 獲取冷啓動的啓動時間(同上,重複三次,取平均值) clearApp ${package_name} starttime1=`getStartupTime ${component}` clearApp ${package_name} starttime2=`getStartupTime ${component}` clearApp ${package_name} starttime3=`getStartupTime ${component}` echo "冷啓動時間(ms):$starttime1 $starttime2 $starttime3" echo "($starttime1+$starttime2+$starttime3)/3" | bc # 啓動時間測試結束,卸載應用 uninstall ${package_name}
由於安卓手機的多樣性,此腳本未作容錯處理,部分手機在腳本運行過程當中可能會彈出權限確認框或者其餘界面,從而致使腳本運行失敗。這個問題,你們能夠根據本身手機的特性來作對應處理。
歡迎關注微信公衆號「測試開發Stack」,更多原創文章第一時間發佈!
原文出處:https://www.cnblogs.com/liushengchieh/p/10418279.html