自動化測試框架
Monkey
: 穩定性測試
特定:不能指定執行操作的順序Appium框架 + Python
: UI自動化ADB + Python
: UI自動化
需要了解下面兩個步驟:
- ADB命令如何執行操作(點擊、滑動、輸入文本)
- Python中如何執行ADB命令
ADB是什么
簡介
adb全稱(Android Debug Bridge),它是一個通用命令行工具,它可以做為Android與PC端連接的一個橋梁,所以adb又稱為Android調試橋,用戶可以通過adb在電腦上對Android設備進行全面操作,比如安裝和調試應用,操作文件的傳輸等。
主要功能
- 在設備上運行shell
- 管理模擬器或設備的端口映射
- 在計算機與設備之間拷貝推送文件
- 安裝,卸載apk,查看設備信息
運行架構
adb client(客戶端)
:client實際上就是shell控制台,通過Client發送命令給server。發送命令時,首先檢測PC上有沒有啟動Server,如果沒有Server,則自動啟動一個Server,然后將命令發送到Server,並不關心命令發送過去以后會怎樣。adb server(服務器)
:server是運行在主機上的一個后台進程,作用是檢測USB端口何時連接或者移除設備,server還將adb client的請求通過USB或者TCP的發送發送到adbd上。adb demon(守護進程)
:運行在Android設備上的一個進程,作用是通過USB或者TCP連接到adb server,並且為運行在主機上的adb client提供一些服務。
工作原理
- 首先用戶啟動一個adb客戶端時,此客戶端先檢查是否存在已運行的adb服務器進程。如果沒有,它將啟動一個服務器進程
- 當服務器進程啟動時,adb服務器就會綁定本地的TCP端口5037並監聽adb客戶端發來的命令,使用的adb客戶端都使用端口5037與adb服務器進行對話的。
- 接着服務器將所有運行中的模擬器或設備實例進行連接。它通過掃描所有5555到5585范圍內的奇數端口來定位所有的模擬器或設備。一旦服務器找到了adb守護程序,將建立一個到該端口的連接。
客戶端發送的命令分為三種:
- 不需要經過server處理就能成功的,如:adb version、adb help。
- 需要和server進行通訊,但不需要和demo通訊的命令,如:adb devices。
- 需要和demo進行處理的命令。
設備連接管理
查詢已連接設備/模擬器
adb devices
輸出狀態:
- offline:表示設備未連接成功或無響應。
- device:設備已連接,
- no device:沒有設備/模擬器連接
USB連接
- 保證android設備處於正常開機狀態。
- android設備的開發者選項和USB調試模式已開啟。
- 設備驅動狀態正常。
- 通過USB連接好電腦和設備后使用adb devices確認狀態
無線連接(需要借助USB)
- 將android設備與運行adb的電腦連接在同一個區域網。
- 讓設備在5555端口監聽TCP/IP連接:adb tcpip 5555
- 找到設備的IP地址
- 通過IP地址連接設備:adb connect ip:5555
- 確認連接狀態
無線連接(不需要借助USB)
- 在android設備上安裝一個終端模擬器。終端模擬器下載地址:https://jackpal.github.io/Android-Terminal-Emulator/
- 將android設備與運行adb的電腦連接在同一個區域網。
- 打開android設備上的終端模擬器,在里面依次輸入命令:
su
setprop service.adb.tcp.port 5555
- 找到設備的IP地址
- 在電腦上通過adb和IP地址連接android設備:adb connect ip:5555
adb命令
adb服務命令
查看adb版本:adb version
以root權限運行adb服務:adb root
關閉adb服務:adb kill-server
開啟adb服務:adb start-server
指定adb-server運行端口(默認端口5037):adb -P 端口 adb-server
應用管理命令
安裝APK
adb install apk包名
常用參數:
參數 | 說明 |
---|---|
-r | 覆蓋安裝(保留數據) |
-d | 降級覆蓋安裝 |
-g | 賦予所有運行時權限 |
-l | 將應用安裝到保護目錄/mnt/asec |
-s | 將應用安裝到sdcard目錄 |
adb install安裝原理過程:
- push apk文件到/data/local/tmp
- 調用pm install安裝
- 刪除/data/local/tmp下的對應apk
卸載apk
adb uninstall apk包名
常用參數:
參數 | 說明 |
---|---|
-k | 卸載應用時保留數據和緩存目錄 |
清除應用數據和緩存
adb shell pm clear apk包名
查看設備中已安裝apk包
adb shell pm list apk包
常用參數:
參數 | 說明 |
---|---|
-f | 查看關聯文件 |
-3 | 查看第三方應用 |
-s | 查看系統應用 |
-d | 查看disabled package |
-e | 查看enable package |
-i | 查看package對應的安裝者 |
-u | 查看被卸載過的package |
查看應用包詳細信息
adb shell dumpsys package apk包名
獲取當前正在運行的activity(活動)
adb shell dumpsys activity | grep "mFoc"
adb shell dumpsys window | findstr mCurrentFocus
查看正在運行的services
adb shell dumpsys activity services
強制暫停應用
adb shell am force-stop packagename
文件管理命令
導出設備文件到電腦
adb pull <設備文件路徑> [電腦存儲路徑]
導入電腦文件到設備
adb push <電腦文件路徑> [設備存儲路徑]
日志管理命令
Android系統的日志分為兩部分:底層的Linux內核日志輸出到/proc/kmsg, Android日志輸出到/dev/log。Android的Log等級通常有六類,按照日志級別由低到高分別是:Verbose、Debug、Info、Warning、Error、Assert。
adb logcat # 查看日志
adb logcat -c # 清空日志
adb shell dmesg # 查看內核日志
adb bugreport #收集日志數據,用於后續分析
查看設備系統信息命令
adb shell getprop ro.build.version.release # 查看android系統版本
adb shell dumpsys meminfo apk包 #查看設備內存占用
adb shell dumpsys cpuinfo # 查看設備CPU
adb shell dumpsys gfxinfo apk包 #查看gpu繪制分析
adb shell top # 查看實時資源占用
adb shell dumpsys pwer # 查看電源管理信息
# 獲取屏幕鎖屏數據
adb shell dumpsys power | grep "mScreenOffTimeoutSetting"
adb shell dumpsys power | findstr "mScreenOffTimeoutSetting"(windows)
adb shell getprop ro.product.model # 查看設備型號
adb shell wm size # 查看屏幕分辨率
adb shell wm density # 查看屏幕密度
adb shell dumpsys window displays # 查看顯示屏參數
adb shell getprop ro.build.version.release # 查看android版本
adb shell settings get secure android_id #查看android_id
adb shell df # 獲取android系統各個分區相關信息
adb shell dumpystate # 獲取android系統當前狀態相關信息
adb get-serialno # 獲取設備序列號
adb get-state # 查看模擬器/設備當前狀態
adb shell dumpsys notification # 查看系統通知
adb shell getprop gsm.operator.alpha # 獲取手機運營商信息
adb shell getprop gsm.network.type # 獲取手機網絡類型信息
adb shell ps #adb shell ps # 查看設備進程
adb shell dumpsys battery # 查看設備電池信息
adb shell dumpsys WiFi | more # 查看無線網信息
adb shell dumpsys telephony.registry # 查看電話相關信息
相關內容含義:
名稱 | 說明 |
---|---|
mCallState | 表示呼叫狀態。0表示待機狀態;1-表示來電未接聽狀態;2-表示電話占線。 |
mCallIncomingNumber | 表示最近一次來電的電話號碼 |
mServiceState | 表示服務的狀態;0-表示正常使用狀態;1-表示電話沒有連接到任何網絡;2-表示電話只能撥打緊急呼叫號碼;3-表示電話已關機。 |
mSignalStrength | 表示信號強度信息。 |
mMessageWaiting | 表示是否在等待無線電消息。 |
mCallForwarding | 表示是否啟用呼叫轉移。 |
mDataActivity | 表示無線數據通信情況。0-表示沒有通話;1-表示正在接收IP PPP信號;2-表示正在發生IP PPP信號;3-表示正在發送和接收IP PPP信號。 |
mDataConnectionState | 表示無線數據連接情況;0-表示無數據連接;1-正在創建數據連接;2-表示已連接;3-表示掛起狀態,已創建好連接,但是IP數據通信暫時無法使用。 |
mDataConnectionPossible | 表示是否有數據連接。 |
mDataConnectionReason | 表示數據連接的原因。 |
mDataConnectionLinkProperties | 表示數據連接的鏈路屬性。 |
mDataConnectionNetworkCapabilities | 表示數據鏈路連接的能力。 |
mCellLocation | 表示基站相關信息。 |
自動化工具input命令
adb shell input <參數>
參數 | 說明 |
---|---|
tap x y | 點擊屏幕 |
keyevent 3 | HOME鍵 |
keyevent 4 | 返回鍵 |
keyevent 5 | 打開撥號應用 |
keyevent 24 | 增加音量 |
keyevent 25 | 降低音量 |
keyevent 26 | 電源鍵 |
keyevent 27 | 拍照(需要在相機應用里) |
keyevent 64 | 打開瀏覽器 |
keyevent 82 | 菜單鍵 |
keyevent 85 | 播放/暫停鍵 |
keyevent 86 | 停止播放 |
keyevent 87 | 播放下一首 |
keyevent 88 | 播放上一首 |
keyevent 122 | 移動光標到行首或列表頂部 |
keyevent 123 | 移動光標到行末或列表底部 |
keyevent 126 | 恢復播放 |
keyevent 127 | 暫停播放 |
keyevent 164 | 靜音 |
keyevent 176 | 打開系統設置 |
keyevent 187 | 切換應用 |
keyevent 207 | 打開聯系人 |
keyevent 208 | 打開日歷 |
keyevent 209 | 打開音樂 |
keyevent 210 | 打開計算器 |
keyevent 220 | 降低屏幕亮度 |
keyevent 221 | 提高屏幕亮度 |
keyevent 223 | 系統休眠 |
keyevent 224 | 點亮屏幕 |
keyevent 231 | 打開語音助手 |
text content | 輸入文本 |
# 屏幕滑動
adb shell input swipe x1 y1 x2 y2
# 長按 1000毫秒
adb shell input swipe x1 y1 x2 y2 1000
Adb環境搭建
安裝IDE (android studio)
https://developer.android.google.cn/studio/
啟動時提示:unable to access android sdk add-on list
點擊canal , 后面會自動安裝SDK。
配置環境變量
vi ~/.bash_profile
export PATH=$PATH:/Users/mpy/Library/Android/sdk/platform-tools
export PATH=$PATH:/Users/mpy/Library/Android/sdk/tools
source ~/.bash_profile
啟動模擬器
-
建立一個空項目
-
設置環境
-
啟動項目
-
強制關閉模擬器
adb emu kill # 成功關閉模擬器
安裝APK
cd ~/Library/Android/sdk/platform-tools
adb install apk路徑
查看軟件是否支持Mac M1:
apk后綴名變更為 zip, 解壓后查看lib目錄:存在arm64-v8a目錄就是支持的。
設置開發者模式
進入Setting --》 System --> Languages 設置簡體中文
找到 關於模擬設備 --》 多次點擊版本號 提示已進入開發者模式即可。