3)查看進程列表:adb shell "ps",同時也能獲取到應用的UID,方式如下(不需root權限):
平橋ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
u0_a開頭的都是Android的應用進程,Android的應用的UID是從10000開始,到19999結束,可以在Process.java中查看到(FIRST_APPLICATION_UID和LAST_APPLICATION_UID),u0_a后面的數字就是該應用的UID值減去FIRST_APPLICATION_UID所得的值,所以,對于截圖這個應用進程,它是u0_a155,按前面的規(guī)制,它的UID就是155 + FIRST_APPLICATION_UID = 10155。
VSS - Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)
RSS - Resident Set Size 實際使用物理內存(包含共享庫占用的內存)
PSS - Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存)
USS - Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)
一般來說內存占用大小有如下規(guī)律:VSS = RSS = PSS = USS
使用 adb shell "dumpsys meminfo -s pakagename | pid"命令,輸出結果分以下4部分:
PS:在apk內調用運行獲取其他app的內存數據則需要root權限
adb命令:adb shell dumpsys gfxinfo package | pid
正常情況下幀率應該在16.67ms左右,1秒60幀,執(zhí)行結果如下:
詳細計算方法如下:
還有一個命令是: adb shell dumpsys SurfaceFlinger --latency LayerName
其中LayerName在各個不同系統(tǒng)中獲取的命令是不一樣的
在Android 6系統(tǒng)直接就是SurfaceView
在Android 7系統(tǒng)中可以通過 dumpsys window windows | grep mSurface | grep SurfaceView 然后通過數據截取到
在Android 8系統(tǒng)中可以通過 dumpsys SurfaceFlinger | grep android包名獲取到
執(zhí)行命令結果如下:
計算方法比較簡單,一般打印出來的數據是129行(部分機型打印兩次257行,但是第一部分是無效數據,取后半部分),取len-2的第一列數據為end_time,取len-128的第一列數據為start_time
fps = 127/((end_time - start_time) / 1000000.0)
至于為啥要取第一列數據,這里不做過多介紹,歡迎參看這兩篇文章
老羅的文章SurfaceView原理
Android性能測試之fps獲取
至于為啥要處于1000000,因為命令打印出來的是納秒單位,要轉為毫秒進行計算,127就是因為命令一次打印出來127幀的數據而已
有兩種方法可以獲取
1) adb shell "top -n 5 | grep package | pid" ,第三列就是實時監(jiān)控的CPU占用率(-n 指定執(zhí)行次數,不需root權限),這邊top命令執(zhí)行需要2到3s左右,一般可以采用busybox 的top命令執(zhí)行,效率會快很多
2) adb shell "dumpsys cpuinfo | grep package | pid"
兩種方法直接區(qū)別在于,top是持續(xù)監(jiān)控狀態(tài),而dumpsys cpuinfo獲取的實時CPU占用率數據
adb命令:adb shell "dumpsys batterystats package | pid" (Android 5.0后引入)
獲取單個應用的耗電量信息,具體返回結果待研究
adb命令:adb shell "dumpsys battery"
出現(xiàn)信息解讀:
AC powered:false 是否連接AC(電源)充電線
USB powered:true 是否連接USB(PC或筆記本USB插口)充電
Wireless powered:false 是否使用了無線電源
status: 1 電池狀態(tài),2為充電狀態(tài),其他為非充電狀態(tài)
level:58 電量(%)
scale: 100. 電量最大數值
voltage: 3977 當前電壓(mV)
current now: -335232. 當前電流(mA)
temperature:355 電池溫度,單位為0.1攝氏度
adb 命令:adb shell "dumpsys package | pid | grep UID" [通過ps命令,獲取app的UID(安裝后唯一且固定)]
adb shell cat /proc/uid_stat/UID/tcp_rcv [cat為查看命令,讀取tcp_rcv獲取應用接收流量信息(設備重啟后清零)]
adb shell cat /proc/uid_stat/UID/tcp_snd [cat為查看命令,讀取tcp_snd獲取應用發(fā)送流量信息(設備重啟后清零)]
計算流量消耗步驟:
或者還有一種方式獲取應用流量消耗:
首先判斷類型:
cat /sys/class/thermal/thermal_zone*/type
只有紅框框出來的是有效的
cat /sys/class/thermal/thermal_zone*/temp
獲取CPU溫度
dumpsys battery | grep temperature 單位0.1攝氏度
獲取/proc/stat文件內容(無權限限制)
總的cpu時間片是 total = user+nice+system+idle+iowait+irq+softirq
忙碌時間為 notidle = user+nice+system +iowait+irq+softirq
cpu使用率計算方法為,先取開始的total值和忙碌時間notidle,隔一段時間片,再取一次計算total2,notidle2, cpuuse = (notidle2 – notidle) * 100 / (total2 - total)%
PS:由于Android 8權限收緊,在Android 8系統(tǒng)手機內apk內讀取文件內容為空,需要shell權限才可獲取文件內容,下同
讀/sys/devices/system/cpu/cpuX/cpufreq/scaling_cur_freq文件的值,X不定,看是幾核手機,scaling_cur_freq是否存在也不一定,需要判斷
至于為啥不取cpuinfo_cur_freq文件的值,原因是android 6,7系統(tǒng)獲取的時候,這個文件shell沒有讀取權限,需要root權限
參考文章:
Android 6,7系統(tǒng)可執(zhí)行
dumpsys window windows | grep "mCurrentFocus"
執(zhí)行結果一般為類似:
mCurrentFocus=Window{81caaa5 u0 com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity}
按照一定規(guī)則把com.tencent.mobileqq提取出來即可
直接apk內讀取文件即可,不需要shell權限(支持到Android8)
Gpu使用率獲?。簳玫絻蓚€值,(前一個/后一個)*100%=使用率
adb shell cat /sys/class/kgsl/kgsl-3d0/gpubusy
Gpu工作頻率:
adb shell cat /sys/class/kgsl/kgsl-3d0/gpuclk
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/cur_freq
Gpu最大、最小工作頻率:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/max_freq
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/min_freq
Gpu可用頻率
adb shell cat /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/available_frequencies
Gpu可用工作模式:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/available_governors
Gpu當前工作模式:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/governor
背景介紹
目前對于移動設備而言,電量是很重要的一個方面。現(xiàn)在大家使用手機基本每天都需要充電,所以用戶也非常關注耗電的問題,如果應用設計不合理導致電量大量消耗,那么對于關注耗電的用戶而言,這款應用將會是首要卸載目標。因此,作為測試人員,我們也應該對應用的耗電做一些針對性測試。
Android電量測試
各參數意義
battery_level: 電量,可以看出電量的變化
plugged: 充電狀態(tài),這一欄顯示是否進行了充電,以及充電的時間范圍。
Screen: 屏幕是否點亮,這一點可以考慮到睡眠狀態(tài)和點亮狀態(tài)下電量的使用信息。
Top: 該欄顯示當前時刻哪個app處于最上層,就是當前手機運行的app,用來判斷某個app對手機電量的影響,這樣也能判斷出該app的耗電量信息。該欄記錄了應用在某一個時刻啟動,以及運行的時間,這對我們比對不同應用對性能的影響有很大的幫助。
wake_lock*: wake_lock該屬性是記錄wake_lock模塊的工作時間。是否有停止的時候等。
running: 界面的狀態(tài),主要判斷是否處于idle的狀態(tài)。用來判斷無操作狀態(tài)下電量的消耗。
wake_lock_in: wake_lock有不同的組件,這個地方記錄在某一個時刻,有哪些部件開始工作,以及工作的時間。
Gps: gps是否開啟。
phone_in_call: 是否進行通話。
Sync: 是否跟后臺同步。可以把鼠標停在某一項上面??梢钥吹胶螘rsync同步啟動的,持續(xù)時間Duration多久。電池容量不會顯示單一行為消耗的具體電量,這里只能顯示使用電池的頻率和時長,你可以看分時段的剩余電量來了解具體消耗了多少電量。
Job: 后臺的工作,比如服務service的運行。
data_conn: 數據連接方式的改變,上面的edge是說明采用的gprs的方式連接網絡的。此數據可以看出手機是使用2g,3g,4g還是wifi進行數據交換的。這一欄可以看出不同的連接方式對電量使用的影響。
Status: 電池狀態(tài)信息,有充電,放電,未充電,已充滿,未知等不同狀態(tài)。這一欄記錄了電池狀態(tài)的改變信息。
phone_signal_strength: 手機信號狀態(tài)的改變。這一欄記錄手機信號的強弱變化圖,依次來判斷手機信號對電量的影響。
Health: 電池健康狀態(tài)的信息,這個信息一定程度上反映了這塊電池使用了多長時間。這一欄記錄電池狀態(tài)在何時發(fā)生改變,上面的圖中電池狀態(tài)一直處于good狀態(tài)。
Plug: 充電方式,usb或者插座,以及顯示連接的時間。這一欄顯示了不同的充電方式對電量使用的影響。
優(yōu)點:結果直觀,有詳細的耗電數據
缺點:不支持5.0以下的android系統(tǒng)
獲取數據注意事項:
獲取測試結果時我們也要注意數據的有效性,避免數據誤差,讓數據更有效的說明問題,下面提供兩種方法,來提高獲取數據的有效性。
一、橫向對比法:分兩步測試,第一步測量手機硬件運行消耗的電量;第二步測試手機硬件和軟件運行綜合的耗電量。最后將兩次的耗電進行對比,得出軟件消耗的電量大??;
二、縱向對比法:同時進行兩臺手機,其中一臺手機不運行軟件,另一臺手機運行軟件;分別獲得兩臺手機的耗電量,對比兩臺手機耗電量差異,得出軟件消耗的電量大小。
這兩種方法在測試上有一定的差異,很多應用軟件都是需要移動網絡的支持,而手機接收的網絡信號是會隨時間變化的。
因此,第一種方法的誤差主要來源于手機在不同的基站網絡下工作狀態(tài)的變化。
第二種方法的差異則體現(xiàn)在兩臺手機本身硬件消耗的電量可能存在差異,所以需要盡可能使用同一型號,同一批次的手機。
請注意測試本身不是靠工具的而是靠設計,這是我的理念,所以我一向覺得,很多人認為做測試做的好就是靠掌握一門好的工具,這個觀點是不正確的,所以我可以負責任的告訴你,做Android手機需要掌握的不是工具、而是理念、思維、以及框架,總的來說是本質,而工具只是輔助,那么現(xiàn)在我來介紹一些我了解的工具(僅僅是了解,很多沒用過)
開源 Android 軟件測試工具包括:Android Test Kit, AndroidJUnit4, Appium, calabash-android, Monkey, MonkeyTalk, NativeDriver, Robolectric, RoboSpock, Robotium, UIAutomator, Selendroid。
Android Test Kit
Android Test Kit 是一組 Google 開源測試工具,用于 Android 平臺,包含 Espresso API 可用于編寫簡潔可靠的 Android UI 測試。
AndroidJUnit4
AndroidJUnit4 是一個讓 JUnit 4 可以直接運行在 Android 設備上的開源命令行工具。
Appium
Appium 是一個開源、跨平臺的自動化測試工具,用于測試原生和輕量移動應用,支持 iOS, Android 和 FirefoxOS 平臺。Appium 驅動蘋果的 UIAutomation 庫和 Android 的 UiAutomator 框架,使用 Selenium 的 WebDriver JSON 協(xié)議。Appinm 的 iOS 支持是基于 Dan Cuellar's 的 iOS Auto. Appium 同時綁定了 Selendroid 用于老的 Android 平臺測試。
Calabash-android
calabash-android 是一個基于 Cucumber 的 Android 的功能自動化測試框架。Calabash 允許你寫和執(zhí)行,是開源的自動化移動應用測試工具,支持 Android 和 iOS 原生應用。Calabash 的庫允許原生和混合應用的交互測試,交互包括大量的終端用戶活動。Calabash 可以媲美 Selenium WebDriver。但是, 需要注意的是 web 應用和桌面環(huán)境的交互跟觸摸屏應用的交互是不同的。Calabash 專為觸摸屏設備的原生應用提供 APIs。
Monkey
Monkey 是 Google 開發(fā)的 UI/應用測試工具,也是命令行工具,主要針對壓力測試。你可以在任意的模擬器示例或者設備上運行。Monkey 發(fā)送一個用戶事件的 pseudo-random 流給系統(tǒng),作為你開發(fā)應用的壓力測試。
MonkeyTalk
MonkeyTalk 是世界上最強大的移動應用測試工具。MonkeyTalk 自動為 iOS 和 Android 應用進行真實的,功能性交互測試。MonkeyTalk 提供簡單的 "smoke tests",復雜數據驅動的測試套件。MonkeyTalk 支持原生,移動和混合應用,真實設備或者模擬器。MonkeyTalk 使得場景捕獲非常容易,可以記錄高級別,可讀的測試腳本。同樣的命令可以用在 iOS 和 Android 應用上。你可以記錄一個平臺的一個測試,并且可以在另外一個平臺回放。MonkeyTalk 支持移動觸摸和基于手勢交互為主的移動體驗。點擊,拖拽,移動,甚至是手指繪制也可以被記錄和回放。
NativeDriver
NativeDriver 是 WebDriver API 的實現(xiàn),是原生應用 UI 驅動,而不是 web 應用。
Robolectric
Robolectric 是一款Android單元測試框架,使用 Android SDK jar,所以你可以使用測試驅動開發(fā) Android 應用。測試只需幾秒就可以在工作站的 JVM 運行。Robolectric 處理視圖縮放,資源加載和大量 Android 設備原生的 C 代碼實現(xiàn)。Robolectric 允許你做大部分真實設備上可以做的事情,可以在工作站中運行,也可以在常規(guī)的 JVM 持續(xù)集成環(huán)境運行,不需要通過模擬器。
RoboSpock
RoboSpock 是一個開源的 Android 測試框架。提供簡單的編寫 BDD 行為驅動開發(fā)規(guī)范的方法,使用Groovy 語音,支持 Google Guice 庫。RoboSpock 合并了 Robolectric 和 Spock 的功能。
Robotium
Robotium 是一款國外的Android自動化測試框架,主要針對Android平臺的應用進行黑盒自動化測試,它提供了模擬各種手勢操作(點擊、長 按、滑動等)、查找和斷言機制的API,能夠對各種控件進行操作。Robotium結合Android官方提供的測試框架達到對應用程序進行自動化的測 試。另外,Robotium 4.0版本已經支持對WebView的操作。Robotium 對Activity,Dialog,Toast,Menu 都是支持的。
UIAutomator
uiautomator 測試框架提高用戶界面(UI)的測試效率,通過自動創(chuàng)建功能 UI 測試示例,可以在一個或者多個設備上運行你的應用。
Selendroid
Selendroid 是一個 Android 原生應用的 UI 自動化測試框架。測試使用 Selenium 2 客戶端 API 編寫。Selendroid 可以在模擬器和實際設備上使用,也可以集成網格節(jié)點作為縮放和并行測試。
主要測試內容包括:
1、功能正確性測試;
根據這個安桌軟件的需求,看它到底支持那些功能,對每個功能,編寫測試用例,驗證這個功能是否正確;例如:有注冊,登陸,編輯消息,發(fā)送消息,刪除消息,察看消息等功能,那么你就要測試這每個功能是否正確實現(xiàn)了。
2、界面易用性測試;
主要考慮(1)易理解性;(2)易學習性;(3)易操作性;是否達到要求。
3、兼容性測試;
不同安卓版本的兼容性;不同安卓設備的兼容性,例如:不同廠家的手機,PAD等;看該軟件在不同的軟件和硬件下顯示是否正常,功能是否正確;
4、安全性測試;
用戶信息是否不被泄漏等;
5、不同網絡狀態(tài)下的測試;
wifi和2g,3g不同的網絡速度下的功能是否正確;沒有網絡連接的情況下會怎么樣,等等。