Android自動化測試基礎 — ADB介紹
- 2019 年 10 月 5 日
- 筆記
前言
每一個準備學習Android自動化測試的同學,都會面臨一個Android自動化測試框架的選擇問題。與之前PC和WEB的測試框架不同,Android的自動化框架乍一看,非常的唬人。接踵而來的問題就是:怎麼能有這麼多呢,到底要選擇哪一個呢?
通過這篇文章的介紹,希望能幫助到想了解或者進行Android自動化測試的同學,對Android自動化測試和框架有一個快速的入門和了解。
聽說過的Android自動化框架
首先,你聽過的Android自動化測試框架/工具可能有如下這些(不限於此):
- appium
- uiautomator
- uiautomator2
- uiautomation
- adb
- Robotium
- Espresso
- Instrumentation
- Monkey
- monkeyrunner
當然你還可能接觸到其它的自動化框架,比如:
- python版的uiautomator和uiautomator2
- 騰訊的QT4A
- 網易的AirTest
- 基於JVM的Roboletric
But,本文主要介紹的還是上面第一波所列出來的相關框架的內容。因為它們相(我)對(有)常(了)見(解)。
最基礎的Android工具
不管你最終選擇了哪個自動化的框架,你始終都繞不過的就是ADB(Android Debug Bridge)工具。它是Android開發調試和自動化測試的基礎工具,很多其它工具和框架都會在底層調用它來完成一些事情。
ADB的基礎原理
就好比了解一個人,先了解他的底細一樣;了解一個工具,要先了解它的基本原理。否則在使用過程中「尥蹶子」就不好了。如果你在網上搜ADB原理,會出現很多很多的相關文章,所以這裡就只做一個簡單的說明,想要挖局更多細節的可以自行深入。
這是一張ADB全局的通訊邏輯圖,從圖中可以知道ADB是一套工具集,它包含:
- adb client(運行在PC上的命令行工具)
- adb server(運行在PC上的後台服務進程)
- adbd(運行在設備或模擬器上的後台服務進程)
它們之間的通訊關係也是比較的清晰:
- adb client <–TCP–> adb server(監聽5037埠) <–TCP–> adbd(監聽5555埠)
而它們的生命周期是這樣的:
- adb client執行完就結束,跟普通命令行工具一樣
- adb server在首次執行adb命令時會自動啟動,之後會一直運行在後台
- adbd則是一直在手機上的後台運行,至於啟動時間點估計是在設置debug時
這是另外的一張原理圖,這個圖中說明了adbd內部的運行邏輯。另外還說明了adb server和adbd的另一種通訊方式 — USB連接。這是對上一張圖的補充,結合起來基本就是adb運行邏輯的全貌了。
而最終adbd能驅動Android的應用,則是因為它通過jdwp與JVM通訊達到的。(JDWP:Java Debug Wire Protocol)簡單說就是java的調試後門,通常用於遠程和線上調試。
ADB的基本命令
ADB的命令跟其它命令行工具差別不大,只是參數層次和可用參數多了點。這裡就只介紹下常(知)用(道)的命令:
adb devices #查看當前已連接的設備和模擬器 adb connect ip.to.device # 通過TCP的方式連接到指定的adb server, 即wifi連接 adb install /path/to/apk # 安裝指定APK包 adb uninstall com.package.name # 卸載指定的應用 adb push local remote # 向設備發送文件 adb pull remote local # 從設備下載文件 adb shell # 進入連接shell模式
這些命令裡面最強大的是adb shell,它其實是進入到Android系統的shell環境,可以執行Android的shell中所有的命令。如果你只是做一些簡單的Android自動化操作,那麼adb也許就可以滿足你的需求了。
除了上面提到的幾個命令,只通過adb還可以實現點擊、輸入、滑動、dump介面樹等功能。具體的命令如下:
# 點擊坐標點10,10 adb shell input tap 10 10 # 輸入文本1 adb shell input text 1 # 從坐標點100,410滑動到100,5 adb shell input swipe 100 410 100 5 # dump當前介面樹到指定文件 adb shell uiautomator dump /sdcard/ui.xml # 啟動指定應用,並支援原生的scheme協議跳轉 adb shell am start -n com.cubic.autohome/.LogoActivity -d autohome://carfriend/circlerank
是不是,很強大!!!如果不考慮大規模的開發用例,adb基本可以滿足我的很多常規需求了。想要了解更多其它框架的知識請關注TestQA公眾號!