安卓APP測試知識大全【面試儲備】

一、安卓系統知識概述

1.1 安卓系統架構

  • 應用程序層

  • 應用程序框架層

  • 系統運行庫庫層

  • 系統內核層

  • 四大組件和API

1.2 安卓權限系統

Android操作系統其實是一個多用戶的linux操作系統,每個android應用使用不同的用戶,運行在自己的安全沙盤裏。系統爲所有的文件設置權限,這樣一來只有同一個用戶的應用可以訪問它們。每個應用都有自己單獨的虛擬機,這樣應用的代碼在運行時是隔離的,即一個應用的代碼不能隨意訪問或者意外修改其他應用的內部數據。

1.3 認識adb與安卓間的通信

ADB,即Android Debug Bridge,他是Android提供的一個通用的調試工具,藉助這個工具,我們可以很好的調試開發的程序,adb.exe在安裝的Android的sdk開發包platform-tools目錄下。

它是一個客戶端/服務器架構的命令行工具,主要由以下3個部分組成:

  • adb客戶端:一個用於用戶開發程序的電腦上運行的客戶端

  • adb服務端:負責客戶端與用戶設備的守護進程的通信

  • adb daemon(守護進程):一個以後臺進程的形式運行於模擬器或者物理手機設備上的守護程序

二、安卓APP測試流程圖(轉)

三、安卓App測試點

3.1 UI測試

  • 按鈕、對話框、列表和窗口等靜態界面測試

  • 內容(列表頁、提示框)等動態界面測試

  • APP與系統相關聯之處的UI測試,如:狀態欄/鎖屏彈出的提示,設置中的應用顯示、手機界面的APP顯示等

  • APP與launcher間的交互、與系統其它應用間的交互、與系統本身的交互UI測試


3.2 兼容性測試

  • 不同手機品牌

  • 不同手機的操作系統以及操作系統的不同版本

  • 不同手機屏幕分辨率和不同屏幕尺寸(一般測試主流分辨率)

  • 網絡環境的兼容性 (WiFi、移動網絡、弱網環境、無網絡環境、專網環境

  • 與本地軟件的兼容性

  • APP匹配硬件設備測試(耳機、藍牙、NFC、照相機、手環等等)--根據APP的業務需求特性


3.3 安裝卸載/本地升級測試OTA

  • 應用程序的正常安裝,圖標顯示正常,安裝後正常運行(不同操作系統下安裝)、版本號是否正確

  • 不同版本之間的覆蓋安裝(版本一致,版本大於、版本小於)

  • 覆蓋安裝後,用戶數據的保留

  • 應用程序的正常卸載,卸載後用戶數據是否刪除

  • 安裝/卸載過程中異常情況(斷電,空間不足等)

  • 安裝/卸載過程是否支持取消操作

  • 手動式、命令式adb、自動式(第三方輔助工具)安裝

  • 安裝前後恢復出廠設置,app/數據是否丟失、版本是否改變

  • 安裝/卸載權限,是否有安裝卸載權限,無權限時是否可安裝,

  • root前後安裝測試

  • 直接拷貝至手機system/app目錄下是否直接使用

3.4 版本在線升級測試FOTA

  • 當客戶端有新版本時,有更新提示。

  • 當版本爲非強制升級版時,用戶可以取消更新,老版本能正常使用。用戶在下次啓動app時,仍能出現更新提示。

  • 當版本爲強制升級版時,當給出強制更新後用戶沒有做更新時,退出客戶端。下次啓動app時,仍出現強制升級提示。

  • 當客戶端有新版本時,在本地不刪除客戶端的情況下,直接更新檢查是否能正常更新。

  • 用戶下載/安裝版本過程中斷網或斷電異常情況,是否可恢復,是否支持斷電下載

  • 恢復出廠設置後是否可以支持修改

  • 下載升級包後刪除,是否還可以在繼續下載/是否還有推送提示

  • 整機FOTA升級、獨立APP應用FOTA升級策略

3.5 交互測試

  • 應用的前後臺切換

  • 殺進程

  • 鎖屏

  • 長時間待機

  • 中斷

  • 搖一搖、翻轉

  • 開關機、重啓

3.6 併發測試

  •    應用與應用間併發場景---使用APP時接收微信/QQ等來信(含視頻呼叫)

  •    應用與定位場景----使用APP時不影響定位準確性

  •    應用與通話/短信場景----使用APP時來電話/短信

  •    應用與多媒體場景 ----使用APP時播放音樂/電影

  •   應用與流量併發衝突場景----使用APP時數據業務流量/wifi使用不受影響,且穩定,沒有過大消耗流量場景

  •   應用併發時的功耗和數據流量場景

3.7 客戶端數據庫測試

  • 客戶端後臺數據的增、刪、改、查等數據更新測試

  • 數據爲空的情況測試

  • 檢查客戶端數據存在時,app數據是否能自動從客戶端數據中取出,檢查客戶端數據存在時,app數據是否能自動從客戶端數據中取

  • 當業務對數據進行了修改、刪除後,客戶端和服務端是否會有相應的更新。

  • 沒有root權限,是否可以刪除全部或重要系統文件,會導致app或手機無法使用的文件

3.8 接口測試

  • 業務邏輯功能測試

  • 邊界值測試

  • 參數組合測試

  • 異常情況測試

3.9 性能測試

  • 單位時間耗電量----功耗:軟件手段(工具、log)、硬件手段(電流表儀器)、其他策略(專項待機、隨機待機、非待機)

  • 單位時間網絡流量---公網數據/wifi流量、吞吐量

  • 移動端相關資源利用率---CPU、內存容量是否影響

  • 業務響應時間----響應速度

  • 幀率                ----流暢度

  • 穩定性

  • 可靠性/可恢復性

  • 壓力測試


3.10 安全性測試

  • 反編譯測試--代碼示否混淆(逆向工程)

  • app簽名/密鑰/加密測試

  • 完整性校驗

  • 敏感信息測試

  • 軟鍵盤劫持

  • 權限設置檢查--root

  • 組件安全測試--四大組件:Activity、Service、ContentProvider、Broadcast

  • 服務端接口測試

  • 攻擊類測試--SQL注入、XSS跨站腳本攻擊、CSRF跨站請求僞造、越權訪問

  • 安全測試工具--掃描

  • 基礎環境--公網環境、網絡環境、數據存放環境

  • 數據安全(傳輸、通信、賬戶安全)

  • 程序/代碼安全--後門

  • 業務安全

3.10 其他測試

  • 認證測試

  • 扣費測試

  • 應用商店發佈測試

  • 上傳下載測試

  • 模擬用戶體驗測試----測試人員測(公司內部人員)

  • 用戶體驗測試----給實際用戶使用(非公司內部人員)


四、工具技術(第三方)

4.1 系統監控常用ADB命令

1.4.1 查看應用啓動耗時

adb-s   *******設備id******    shell  am start -W -n 應用名.app/ .MainActivity

1.4.2 獲得電池電量和電池溫度

adb shell dumpsys battery

1.4.3 獲得最耗資源的應用

adb -s ***設備id *** shell top -m 6 -n l -s cpu

1.4.4 獲得內存使用情況

adb -s  ***設備***id  adb shell dumpsys meminfo 應用程序包名

1.4.5 獲取指定程序cpu使用情況

adb -s  ***設備***id  shell dumpsys cpuinfo 應用程序包名

1.4.6 獲取指定程序PID

adb shell "ps | grep packageName"

4.2 需要功能

  • 檢測當前時間被測應用的CPU使用率 以及 總體CPU使用量。

  • 檢測當前時間被測應用佔用的內存量、百分比,剩餘內存量。

  • 檢測應用從啓動開始到當前時間消耗的流量數。

  • 測試數據寫入到CSV文件中,存儲在手機/storage/sdcard0目錄下,同時支持以郵件形式發送文件。

  • 可以選擇開啓浮窗功能,浮窗中實時顯示被測應用佔用性能數據信息。

  • 在浮窗中可以快速啓動或者關閉手機的wifi網絡。

4.3 實現原理

4.3.1 監控CPU的實現原理

Android系統是基於Linux內核的,所以系統文件的結構和Linux下一樣,系統總體CPU使用信息放在/proc/stat文件下,/proc/cpuinfo文件存放CPU的其它信息,包括CPU名稱,直接讀取即可。Emmagee是將選中應用的PID傳入,讀取/proc/PID/stat文件信息及可獲取該PID對應程序的CPU信息。

4.3.2 監控內存的實現原理

內存和cpu的處理方式類似。先獲取到當被測應用的PID,然後按照PID從 /proc/meminfo文件中獲取當前被測應用佔用的內存信息。

4.3.3 監控流量消耗的實現原理

系統中有存放整體流量和針對當程序的流量統計,/proc/net/dev和/proc/uid_stat/UID下存放tcp_rcv和tcp_send文件,分別存放下行流量和上行流量,操作前後相減就得出結果 。

4.3.4 監控電量的實現原理

電量、電壓和溫度情況是通過監聽系統的電池管理事件的廣播來獲取的。

4.3.5 監控啓動時間的實現原理

我們點擊界面的開始測試時,程序會啓動,之後所有的數據統計以及更新進行處理的。會在onStartCommand()裏面啓動一個線程“handler.postDelayed(task, 1000)”,進行數據的更新同時會嘗試通過ActivityManger從logcat中獲取到軟件的啓動時間。

紅色框框內的東西就是通過調用一個管理Android幀緩衝區的系統服務SurfaceFlinger來獲取用於計算fps的幀數據,具體可參考:Android fps的計算方式。

「Have Fun ~ Tester !」

「點擊閱讀閱文,查看FunTester歷史原創集合」


本文分享自微信公衆號 - FunTester(NuclearTester)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章