1. 程式人生 > >如何在Android手機上進行自動化測試(上)

如何在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