Airtest的多機協作、交互及設備切換set_current()

上期回顧:Airtest+Poco常見Exception報錯


以下基於
python3.8;airtestIDE1.2.13;airtest1.2.4;pocoui1.0.85

一般其他的UI自動化框架,雖然支持併發測試,但每個端之間是分隔的,不方便交互。而Airtest天生支持多機之間的交互操作,比如你可以控制兩臺手機聊微信。

一、如何連接多臺設備:

1.1在AirtestIDE中連接多臺設備

以安卓爲例,ios好像沒有提供連接多臺設備的UI。

1.插上兩臺手機,在設備連接欄刷新可以看到兩臺設備,先連接一臺

 

2.第1臺連接成功後,右上角會出現倆個按鈕,左邊的按鈕就是用來切換設備或者切換到剛纔連接設備的面板,選擇切回面板

 

3.再次連接第2臺設備。之後就可以通過那個按鈕切換設備畫面,或是切回面板,斷開連接

 

 

1.2在腳本中連接多臺設備

from airtest.core.api import *
# 連接第一臺手機
dev1 = connect_device("Android://127.0.0.1:5037/serial1") 
# 連接第二臺手機
dev2 = connect_device("Android://127.0.0.1:5037/serial2") 

# IP和接口默認情況下不會變,所以可以簡寫爲
dev1 = connect_device("Android:///serial1") 
dev2 = connect_device("Android:///serial2")

connect_device()詳解可以看之前文章:Airtest API精講之設備連接管理API集合
設備連接符怎麼寫可以看之前文章:Airtest命令行運行airtest run詳解

1.3通過命令行連接多臺設備(推薦)

實際跑自動化的時候,一臺PC可能插着很多手機,我們不可能連着AirtestIDE,另外把序列號寫死在腳本中也不方便。所以需要用到Airtest的命令行來連接多臺設備

# android
airtest run "D:\qasite.air" --device "android:///65fade15" --device "android:///8d8fd86" --log "D:\log"

#ios
airtest run "D:\qasite.air" --device "ios:///http+usbmux://07bbb06a267ee" --device "ios:///http+usbmux://as9dfdfs87" --log "D:\log"

airtest run詳情可以看:Airtest命令行運行airtest run詳解

二、連接多臺設備後如何切換設備

在連接上多臺設備後,我們可以通過print(G.DEVICE_LIST)查看當前的兩個設備對象實例

 

 

之後我們可以通過set_current()來切換當前設備

set_current(idx)
將當前操作手機切換爲指定設備,idx可以是下標也可以是設備序列號。

源碼解析:

# 源碼位置:your_python_path\site-packages\airtest\core\api.py
def set_current(idx):
    dev_dict = {dev.uuid: dev for dev in G.DEVICE_LIST}
    if idx in dev_dict:
        current_dev = dev_dict[idx]
    elif isinstance(idx, int) and idx < len(G.DEVICE_LIST):
        current_dev = G.DEVICE_LIST[idx]
    else:
        raise IndexError("device idx not found in: %s or %s" % (
            list(dev_dict.keys()), list(range(len(G.DEVICE_LIST)))))
    G.DEVICE = current_dev

第一行,先定義一個字典,遍歷所有設備實例,將設備uuid(安卓是序列號)設爲鍵(key),值(value)爲設備實例
第二行,如果傳入uuid在字典中,則將current_dev賦值爲該設備實例
第四行,判斷如果傳的是下標,且下標值不超過設備數,則將current_dev賦值爲指定下標的設備實例
最後一行,將current_dev賦值給G.DEVICE,G.DEVICE保存當前設備實例

示例:

from airtest.core.api import *

# 可以通過下標切換設備,下標從0開始
set_current(0)
set_current(1)
set_current(2)

# 也可以通過序列號切換設備
set_current("serial1")
set_current("serial2")

三、多機協作實例

我們以兩臺手機相互聊微信爲例,通過命令行方式連接兩臺手機。

# __author__ = '測試工程師小站'
# __title__ = '微信聊天'
# __desc__ = '雙機交互測試'
from airtest.core.api import *
from poco.drivers.unity3d import UnityPoco

poco0 = UnityPoco(device=G.DEVICE_LIST[0])
poco1 = UnityPoco(device=G.DEVICE_LIST[1])

set_current(0)
sleep(10)
poco0('微信icon').click()
poco0('與手機1的聊天列表').click()  # 假設已經有聊天記錄了,如果沒有,則通過通訊錄發起聊天
poco0('聊天框').click()
text('今天你看測試工程師小站文章了嗎')
poco0('發送').click()

set_current(1)
sleep(10)
poco1('微信icon').click()
poco1('與手機0的聊天列表').click()
assert_equal(poco1(text='今天你看測試工程師小站文章了嗎').exists(), True, '收到手機0的聊天內容')
poco1('聊天框').click()
text('看了,趕緊關注+轉發吧')
poco1('發送').click()

set_current(0)
sleep(10)
assert_equal(poco0(text='看了,趕緊關注+轉發吧').exists(), True, '收到手機1的聊天內容')

注意:切換設備後,Airtest反應有點慢,一定要多等一會,否則可能因爲找不到元素報錯

編寫完以上腳本後,就可以通過命令運行了,見上面1.3小節
可以通過Python調用命令行執行:python中os.system、os.popen、subprocess.popen的區別

用例執行完畢後,再通過airtest report命令生成報告:Airtest生成報告命令行airtest report詳解

 

---------------------------------------------------------------------------------

關注微信公衆號即可在手機上查閱,並可接收更多測試分享~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章