如何在Android手機上進行自動化測試(上)
版權宣告:允許轉載,但轉載必須保留原連結;請勿用作商業或者非法用途
前言
通過閱讀本節教程,你將瞭解到以下內容:
- 如何在指令碼程式碼中、執行指令碼時指定手機
- 如何填寫
--device Android:///
的內容 - 如何便捷地在指令碼中呼叫ADB指令或Android專屬介面
連線Android手機
在AirtestIDE裡連線Android手機
使用AirtestIDE對Android應用進行自動化測試時,第一步就需要連線Android裝置。
請查閱我們的裝置連線文件裡的指引,安裝好驅動、開啟手機裡的開發者選項
、允許USB除錯
選項後,用USB線連上手機並在AirtestIDE中嘗試連線。
如果遇到了問題,請查閱Android連線常見問題文件,根據裡面提供的自查步驟排查問題,有些品牌手機有專屬的選項需要另行開啟(例如小米、Vivo/Oppo),請同樣查閱對應品牌的注意事項來避免問題。
裝置的支援情況
目前我們支援市面上幾乎絕大多數Android手機、Android模擬器(模擬器連線教程請查閱這裡),也可能支援少部分特殊的基於Android系統的硬體裝置(這類裝置由於種類繁多,我們無法一一進行測試和支援,如果有相容需求請聯絡開發組)。
在成功連上手機後,我們就能夠在AirtestIDE裡操作手機畫面,就像下圖中這樣,接下來就可以開始用這臺手機編寫指令碼了。
裝置連線的特殊選項設定
有少數非手機的Android裝置(例如智慧電視、智慧後視鏡等),直接點選connect
按鈕不能連線,但是可以嘗試通過勾選connect
下拉選單中的選項來嘗試連線。
例如,我們的預設連線方式不支援模擬器,因此在連線模擬器時,需要先勾選Use Javacap
Use ADB orientation
)。這裡connect
下拉選單的三個選項,是截圖、旋轉和點選的三個備選方案,在預設方案無法生效的時候,使用這3個備選方案可能就可以支援裝置了。
注意:部分品牌手機不支援某個功能,可能僅僅只是因為選項沒有開啟,例如小米手機必須要開啟了允許模擬點選
才能夠在AirtestIDE中使用預設方式點選手機(速度更快,效果更好)。如果是正常的手機裝置,遇到問題時請儘量先查閱文件排查問題。這幾個備選方案的效率都比預設方案低,只有部分特殊的Android裝置才需要使用到備選方案。
執行指令碼時如何指定手機
當我們在AirtestIDE裡連上手機並編寫完指令碼,當點選執行指令碼按鈕時,預設會在執行時的命令列裡使用當前已經在AirtestIDE裡連線的手機,就像這樣:
"D:\AirtestIDE\AirtestIDE" runner "untitled.air" --device Android://127.0.0.1:5037/F8UDU16409004135 --log "D:\log"
其中--device Android://127.0.0.1:5037/F8UDU16409004135
就是當前使用的本地手機,它將我們這臺裝置號為F8UDU16409004135
的手機名稱告訴Airtest,讓它明白我們需要使用這臺手機。
我們也可以在命令列中不填寫具體的手機裝置號,用--device Android:///
這樣的內容來表示在當前連線的一臺Android裝置上執行即可,無論它的裝置號是什麼。
如果在命令列中,完全不填寫--device
,預設將會不連任何裝置來執行程式碼,那麼在執行到需要有裝置才能跑的程式碼時將會報錯(例如touch
語句必須要連上裝置才能執行)。
如果希望在指令碼中通過程式碼進行裝置連線,可以使用connect_device介面,或是在auto_setup
介面中傳入devices
引數,請參考二、Airtest介紹指令碼入門-如何在Python指令碼中使用Airtest裡的相關內容。
裝置連線字串如何編寫
在剛才的命令列中使用的 --device
引數,傳入的是一個裝置字串,以安卓裝置為例,字串完整定義如下:
Android://<adbhost[localhost]>:<adbport[5037]>/<serialno>
其中,adbhost是adb server所在主機的ip,預設是本機127.0.0.1,adb port預設是5037,serialno是android手機的序列號。
這裡提供一些常見的填寫範例供大家參考:
# 什麼都不填寫,會預設取當前連線中的第一臺手機 Android:/// # 連線本機預設埠連的一臺裝置號為79d03fa的手機 Android://127.0.0.1:5037/79d03fa # 用本機的adb連線一臺adb connect過的遠端裝置,注意10.254.60.1:5555其實是serialno Android://127.0.0.1:5037/10.254.60.1:5555 # 模擬器等特殊裝置、使用了連線引數時: # 模擬器連線,勾選了Use javacap模式 Android://127.0.0.1:5037/127.0.0.1:7555?cap_method=JAVACAP # 所有的選項都勾選上之後連線的裝置,用&&來連線多個引數字串 Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH
更多注意事項、其他平臺範例、命令列中使用了&
符號應該如何處理等,都可以在文件關於裝置字串中找到。
多機協作
Airtest支援一個指令碼中連上多臺手機,但是需要注意的是,並不是能夠自動讓這一個指令碼在多臺手機上跑,而是能夠在指令碼中使用這幾臺手機,實現一些類似於多機協作的效果(例如讓兩臺手機登入同一個APP並相互“新增好友”)。
假如我們現在正在使用AirtestIDE編寫指令碼,已經同時連上多臺手機,在執行指令碼的時候AirtestIDE將會自動在命令列中新增多個--device
引數,把當前連線的手機都告訴指令碼,無需其他額外操作。
或者也可以直接在腳本里使用多個connect_device
語句,分別傳入手機連線串資訊即可:
from airtest.core.api import connect_device dev1 = connect_device("Android://127.0.0.1:5037/serialno1") # 連上第一臺手機 dev2 = connect_device("Android://127.0.0.1:5037/serialno2") # 第二臺手機
在連線多臺手機後,我們能夠在Airtest的全域性變數G.DEVICE_LIST
中看到所有當前連線中的裝置,可以使用set_current
介面在多臺裝置之間切換。
print(G.DEVICE_LIST) # 此時裝置列表為[dev1, dev2] # 傳入數字0切換當前操作的手機到第1臺 set_current(0) # 切換當前操作的手機到序列號為serialno2的手機 set_current("serialno2") # 使用device()介面獲取當前連線中的裝置Android物件 current_dev = device()
Android平臺專屬功能與介面
在二、Airtest介紹與指令碼入門-平臺相關的介面一節中,我們提到了每個介面支援的平臺可能各不相同,而Android支援的介面是最全面、最豐富的。
基本上airtest.core.api
中的介面(文件地址),在Android平臺上都可以直接使用,例如:
# 清理某個應用資料 clear_app("org.cocos2d.blackjack") # 啟動某個應用 start_app("org.cocos2d.blackjack") # 傳入某個按鍵響應 keyevent("BACK")
Android裝置介面
除了在airtest.core.api
中提供的跨平臺介面之外,Android裝置物件還有很多內建的介面可以呼叫,我們可以在airtest.core.android.android module這個文件中查閱到Android裝置物件擁有的方法,然後像這樣呼叫:
dev = device() # 獲取到當前裝置的Android物件 print(dev.get_display_info()) # 檢視當前裝置的顯示資訊 print(dev.list_app()) # 打印出當前安裝的app列表
ADB指令呼叫
在Android裝置的測試指令碼中,有時候我們需要輸入一些ADB
指令,如果在普通的Python指令碼中想要呼叫ADB
指令,也許需要用到subprocess
等模組單獨啟動程序執行命令列才能實現。
但是在Airtest指令碼中,呼叫ADB指令是非常簡單的事情:
# 對當前裝置執行指令 adb shell ls print(shell("ls")) # 對特定裝置執行adb指令 dev = connect_device("Android:///device1") dev.shell("ls") # 切換到某臺裝置,執行adb指令 set_current(0) shell("ls")
手機助手便捷功能
在使用AirtestIDE連線Android手機時,我們還提供了一個簡單的手機助手功能,使用方法在這裡。
在連上Android手機後,點選裝置視窗右上角的工具圖示,在展開下拉選單中,選擇Show assistant dialog
即可開啟安卓手機助手。
在安卓手機助手中,我們提供了以下幾種功能:
- 手機應用的安裝/解除安裝/列表檢視
- 常用快捷操作:開啟網址、輸入文字、切換輸入法、音量調節等
- 手機Shell除錯視窗
希望我們的Android手機助手在大家使用Android手機時,起到良好的輔助作用,如果有BUG或者功能建議,請反饋至Githu