airtest之使用tidevice工具輕松連接iOS


上期回顧: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
 
        

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM