上期回顧:airtestIDE連接iOS真機
以下基於
python3.8;airtestIDE1.2.9;airtest1.1.10;pocoui1.0.82;iOS14.4
tidevice是今年年初阿里開源的測試iOS手機的自動化工具。該工具能夠用於與iOS設備進行通信, 提供以下功能
-
截圖
-
獲取手機信息
-
ipa包的安裝和卸載
-
根據bundleID 啟動和停止應用
-
列出安裝應用信息
-
模擬Xcode運行XCTest,常用的如啟動WebDriverAgent測試(此方法不依賴xcodebuild)
-
獲取指定應用性能(CPU,MEM,FPS)
該工具支持運行在Mac,Linux,Windows上
工具地址為:
https://github.com/alibaba/taobao-iphone-device
其亮點為:
第一,在Windows上也可以啟動蘋果手機的WebDriverAgent從而進行自動化(脫離了Xcode);
第二,不用搭建復雜的環境,裝了tidevice,只要一條命令即可。
安裝tidevice
需要Python3.7及以上版本
pip install tidevice
列出iOS設備
~ tidevice list List of apple devices attached 00008020-00047421023300 iPhoneXr ~ tidevice list --json [ { "udid": "00008020-00047421023300", "name": "iPhoneXr" } ]
查看已安裝應用BundleID
~ tidevice applist com.KLab.TestAirTest TestAirTest 0.1 com.apple.TestFlight TestFlight 3.0.1 com.facebook.Facebook Facebook 300.0 com.appium.wda.xctrunner WebDriverAgentRunner-Runner 1.0
可以看到最后那個應用就是上篇文章airtestIDE連接iOS真機在Xcdoe上安裝的WebDriverAgentRunner。網上說的Windows上測試iOS,脫離Mac的前提,也是你要先用Mac在Xcode上裝上WebDriverAgentRunner。或者把WebDriverAgentRunner打包成ipa,然后裝手機上。
Run XCTest
# com.appium.wda.xctrunner是上一步獲取的BundleID ~ tidevice -u UDID xctest -B com.appium.wda.xctrunner [I 210508 11:49:31 _device:990] BundleID: com.appium.wda.xctrunner [I 210508 11:49:31 _device:992] DeviceIdentifier: 00008020-00047421023300 [I 210508 11:49:31 _device:834] SignIdentity: 'Apple Development: 6666666@qq.com (GU49R95D)' [I 210508 11:49:31 _device:840] CFBundleExecutable: WebDriverAgentRunner-Runner [I 210508 11:49:31 _device:871] AppContainer: /private/var/mobile/Containers/Data/Application/6B1FBDC0-F331-46F5-B13D-0DE4E8E4B4 [I 210508 11:49:31 _device:911] Launch 'com.appium.wda.xctrunner' pid: 442 [I 210508 11:49:31 _device:1086] ProductVersion: 14.4 [I 210508 11:49:31 _device:1041] Test runner ready detected [I 210508 11:49:31 _device:1033] Start execute test plan with IDE version: 29 [I 210508 11:49:32 _device:947] WebDriverAgent start successfully
這步相當於上篇文章在Xcdoe中啟動WebDriverAgentRunner,如果只連着一台手機,-u UDID可以省略不寫。
在airtestIDE里連接iOS手機
上篇文章中用Xcode啟動WebDriverAgentRunner后,在airtestIDE里輸入的連接字符串是:http://127.0.0.1:8100
剛剛我們用tidevice啟動WebDriverAgentRunner后,需要在airtestIDE里輸入的連接字符串是:http+usbmux://00008020-00047421023300
后面那一串數字是之前獲取的手機的udid
另一種啟動方式
運行WebDriverAgent
tidevice wdaproxy -B com.appium.wda.xctrunner --port 8100 # 上面這條命令相當於以下2個命令: tidevice xctest -B com.appium.wda.xctrunner iproxy 8100 8100
測試Unity游戲
上篇文章中,使用官方WDA,執行完上面的步驟后,如果是要測試Unity游戲,還需要執行
iproxy 5001 5001
而使用tidevice,就不用再執行上面步驟了,直接在AirtestIDE里通過http+usbmux://00008020-00047421023300 連接設備即可。
如果是脫離AirtestIDE,則可以在腳本中通過以下代碼連接設備,即可使用iosPoco和UnityPoco。
auto_setup(__file__, devices=["ios:///http+usbmux://231ad2195352c53a702"])
如果是用命令行,則可以通過以下命令啟動腳本:
airtest run "your_case_path" --device "ios:///http+usbmux://231ad21953b6452c53a702" --log "your_log_path"
其他tidevice命令
# 查看版本號 $ tidevice version 0.1.0 # 安裝應用 $ tidevice install example.ipa # 指定設備安裝 $ tidevice --udid $UDID install https://example.org/example.ipa # 卸載應用 $ tidevice uninstall com.example.demo # 啟動應用 $ tidevice launch com.example.demo # 停止應用 $ tidevice kill com.example.demo # 查看已安裝應用 $ tidevice applist # 查看運行中的應用 $ tidevice ps $ tidevice ps --json output as json # 運行XCTEST $ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner # 運行XCTEST,修改監聽端口為8200, 並顯示調試日志 $ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner -e USB_PORT:8200 --debug # 轉發請求到手機,類似於iproxy $ tidevice relay 8100 8100 # 轉發並把傳輸的內容用hexdump的方法print出來 $ tidevice relay -x 8100 8100 # 運行 XCTest 並在PC上監聽8200端口轉發到手機8100服務 # wdaproxy這個命令會同時調用xctest和relay,另外當wda退出時,會自動重新啟動xctest # 不支持運行企業證書簽名的WDA $ tidevice wdaproxy -B com.facebook.wda.WebDriverAgent.Runner --port 8200 # 查看設備信息 $ tidevice info # 查看設備電源信息 $ tidevice info --domain com.apple.mobile.battery --json { "BatteryCurrentCapacity": 53, "BatteryIsCharging": true, "ExternalChargeCapable": true, "ExternalConnected": true, "FullyCharged": false, "GasGaugeCapability": true, "HasBattery": true } # 重啟 $ tidevice reboot # 截圖 $ tidevice screenshot screenshot.jpg # 性能采集 (TODO) # $ tidevice perf -o fps,mem,cpu -B com.example.demo # 輸出日志 same as idevicesyslog $ tidevice syslog
---------------------------------------------------------------------------------
關注微信公眾號即可在手機上查閱,並可接收更多測試分享~