版權聲明:允許轉載,但轉載必須保留原鏈接;請勿用作商業或者非法用途
Airtest支持iOS自動化測試,在Mac上為iOS手機部署iOS-Tagent之后,就可以使用AirtestIDE連接設備,像連接安卓設備一樣,實時投影、控制手機。iOS測試不僅限於真機測試,iOS模擬器也可以進行。Mac端上部署完成后還可以提供給同一局域網內的windows上遠程連接使用。同時支持airtest圖像識別和poco UI檢索。
本文介紹iOS自動化測試的部署過程,提供一個簡單的測試腳本,列舉了iOS測試過程中常見的問題。
功能支持
- 支持AirtestIDE連接,實時控制 iPhone
- 支持基本操作如啟動app、點擊、滑動、輸入、截圖等等操作
- 支持控件檢索技術Poco和圖像識別
- 自動化腳本錄制、一鍵回放、報告查看等基本功能
- 支持真機或者模擬器
安裝部署
版本需求:
- Mac Xcode ≥ 9.3
- iPhone iOS ≥ 9.3
- 在 9.3≤iOS≤10時,由於基於舊版xcode SDK,建議使用Xcode 版本≤10.1來啟動iOS-Tagent,否則會出現手機截屏不全的問題。
部署流程
- 在Mac下載 iOS-Tagent ,使用 Xcode 啟動
Test
, 具體啟動過程可參考 https://github.com/AirtestProject/iOS-Tagent 。當Xcode的log窗口輸出下圖信息的時候,就意味着部署成功了。
- 啟動代理,在命令行下執行
iproxy 8100 8100
運行代理后,可以在瀏覽器打開 http://127.0.0.1:8100/inspector ,查看iOS設備是否能成功連接。
iproxy是usbmuxd附帶的一個小工具,它的作用是將設備的某個端口映射到電腦的某個端口。mac下可以通過brew安裝
brew install usbmuxd
。
iproxy 8100 8100
意思就是將手機的8100端口,映射到電腦的8100端口上。這樣我們就能通過訪問電腦的8100端口來訪問到手機了。
- 在 AirtestIDE 的設備窗口,輸入地址:
http://127.0.0.1:8100
或http://x.x.x.x(MAC IP):8100
:
點擊Connect
按鈕即可連接iOS設備,如圖:
支持Xcode中的iOS模擬器
Xcode中的iOS Simulator模擬器部署過程和真機一樣,但是可以省略步驟2,不需要另外執行proxy。
當Xcode的log窗口看到下面內容的時候,就可以直接用地址 http://x.x.x.x:8100
進行連接了,也就是log里顯示出來的ServerURLHere
中的地址:
WebDriverAgentRunner-Runner[xxx:xxx] ServerURLHere->http://x.x.x.x:8100<-ServerURLHere
支持Windows連接
我們同樣能夠在Windows上連接一個遠程的iOS設備,但是依然需要有Mac電腦與Xcode環境。首先按照上文的部署教程在Mac上啟動iOS-Tagent之后,不再使用iproxy啟動代理,而是改用 wdaproxy。因為iproxy
只支持本機端口的映射,而wdaproxy
能夠支持遠程IP映射,這意味着可以在第二部PC上,通過訪問ip的方式訪問到Mac電腦上連接的iOS設備。
通過
brew install openatx/tap/wdaproxy
安裝好wdaproxy
使用方法與
iproxy
一致,wdaproxy 8100 8100
,或者不填寫端口也可以,默認將會使用8100:
開始測試
iOS 的測試和其他設備差不多,支持圖像識別和UI檢索,下面簡單介紹一個iOS測試例子:
- 連接設備
- 點擊home鍵
- 截屏
- 執行滑動操作
- 使用poco點擊app Safari
- 使用poco點擊瀏覽器的搜索框,獲取焦點
- 在搜索框輸入“airtest”
- 在搜索頁面往下滑動
- 判斷是否存在airtest官網地址
from airtest.core.api import * from poco.drivers.ios import iosPoco poco = iosPoco() auto_setup(__file__) connect_device("ios:///x.x.x.x:8100") keyevent("HOME") snapshot() swipe(Template(r"tpl1561985939879.png", record_pos=(0.356, -0.174), resolution=(750.0, 1334.0)), vector=[-0.685, 0.0481]) poco("Safari").click() poco("URL").click() text("airtest") poco("People also search for").swipe([-0.0541, -0.4206]) exists(Template(r"tpl1560844284543.png", record_pos=(-0.292, 0.688), resolution=(750, 1334)))
常見問題
-
如何在模擬器安裝應用
- 把xx.ipa 改成xx.zip,解壓得到xx.app
- 打開模擬器, 在終端運行
xcrun simctl install booted xx.app
tips: 不可以把真機 app 包安裝在iOS模擬器上,真機的app是基於arm的,而模擬器是運行在 X86 指令集上的,強行安裝會導致閃退的問題。
-
如何進行iOS多機測試
目前暫未開放iOS多機測試功能,敬請期待 -
Api 支持狀況
請注意,iOS設備與Android設備有很大的不同,以下通用的 Airtest 的 API 在iOS上都是支持的:- start_app: OK
- stop_app: OK
- snapshot: OK
- home: OK
- touch: OK
- swipe: OK
- text: OK
- wait: OK
- exists: OK
- find_all: OK
- assert_exists: OK
- assert_not_exists: OK
但是以下API是不支持的:
- wake: 暫未支持 (考慮用
home
方法替代) - keyevent: 只支持
home
事件 - clear_app: 暫未支持
- install: 暫未支持
- uninstall: 暫未支持