App自動化測試-ADB


自動化測試框架

  • Monkey : 穩定性測試
    特定:不能指定執行操作的順序
  • Appium框架 + Python: UI自動化
  • ADB + Python: UI自動化

需要了解下面兩個步驟:

  1. ADB命令如何執行操作(點擊、滑動、輸入文本)
  2. 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提供一些服務。
    image

工作原理

  1. 首先用戶啟動一個adb客戶端時,此客戶端先檢查是否存在已運行的adb服務器進程。如果沒有,它將啟動一個服務器進程
  2. 當服務器進程啟動時,adb服務器就會綁定本地的TCP端口5037並監聽adb客戶端發來的命令,使用的adb客戶端都使用端口5037與adb服務器進行對話的。
  3. 接着服務器將所有運行中的模擬器或設備實例進行連接。它通過掃描所有5555到5585范圍內的奇數端口來定位所有的模擬器或設備。一旦服務器找到了adb守護程序,將建立一個到該端口的連接。

客戶端發送的命令分為三種:

  • 不需要經過server處理就能成功的,如:adb version、adb help。
  • 需要和server進行通訊,但不需要和demo通訊的命令,如:adb devices。
  • 需要和demo進行處理的命令。

設備連接管理

查詢已連接設備/模擬器

adb devices

輸出狀態:

  • offline:表示設備未連接成功或無響應。
  • device:設備已連接,
  • no device:沒有設備/模擬器連接

USB連接

  1. 保證android設備處於正常開機狀態。
  2. android設備的開發者選項和USB調試模式已開啟。
  3. 設備驅動狀態正常。
  4. 通過USB連接好電腦和設備后使用adb devices確認狀態

無線連接(需要借助USB)

  1. 將android設備與運行adb的電腦連接在同一個區域網。
  2. 讓設備在5555端口監聽TCP/IP連接:adb tcpip 5555
  3. 找到設備的IP地址
  4. 通過IP地址連接設備:adb connect ip:5555
  5. 確認連接狀態

無線連接(不需要借助USB)

  1. 在android設備上安裝一個終端模擬器。終端模擬器下載地址:https://jackpal.github.io/Android-Terminal-Emulator/
  2. 將android設備與運行adb的電腦連接在同一個區域網。
  3. 打開android設備上的終端模擬器,在里面依次輸入命令:
su
setprop service.adb.tcp.port 5555
  1. 找到設備的IP地址
  2. 在電腦上通過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  # 查看設備進程

image

adb shell dumpsys battery # 查看設備電池信息

image

adb shell dumpsys WiFi | more # 查看無線網信息

image

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 

啟動模擬器

  1. 建立一個空項目
    image

  2. 設置環境
    image

  3. 啟動項目
    image

  4. 強制關閉模擬器

adb emu kill # 成功關閉模擬器

安裝APK

cd ~/Library/Android/sdk/platform-tools
adb install apk路徑

image

查看軟件是否支持Mac M1:
apk后綴名變更為 zip, 解壓后查看lib目錄:存在arm64-v8a目錄就是支持的。

設置開發者模式

進入Setting --》 System --> Languages 設置簡體中文
找到 關於模擬設備 --》 多次點擊版本號 提示已進入開發者模式即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM