做iOS自動化測試必須知道的一些知識


WDA

facebook wda

2015年Facebook 開源了一款 iOS 移動測試框架WebDriverAgent,WebDriverAgent 在 iOS 端實現了一個 WebDriver server ,借助這個 server 我們可以遠程控制 iOS 設備。你可以啟動、殺死應用,點擊、滾動視圖,或者確定頁面展示是否正確。它通過鏈接 XCTest.framework 並調用蘋果的 API 直接在設備上執行命令。這使得它成為應用程序端到端測試或通用設備自動化的完美工具

wda作為任何UITest的捆綁軟件啟動,WebDriverAgentRunner作為一個后台應用運行在iOS手機上,
ServerURLHere->http://[SOME_IP]:8100<-ServerURLHere即在手機上8100端口啟動一個HTTP server,內部就是一個死循環,監聽網絡傳輸過來的webdriver協議的數據,解析並處理點擊事件

但該項目已經存檔(archived),不再維護。2019年5月,Facebook開源了IDB,即“ iOS Development Bridge”,這是一個用於使iOS模擬器和設備自動化的命令行界面。他們正在將自己的內部項目從WDA遷移到IDB,並建議將其檢查出來作為替代方案

appium wda

由於facebook wda已經停止維護,現在一般推薦使用fork自 facebook wda的appuim wda

airtest wda

iOS-Tagent也是基於 facebook 的 WebDriverAgent 項目上進行開發的 , 目的是為了對 Airtest Project 提供iOS平台的測試支持,該項目在原項目的基礎上進行了定制化的優化和功能調整

XCTestWD

XCTestWD是WebDriver server的Swift版本實現,主要用於Macaca自動化項目,這里不做過多介紹,更多可參考官方文檔Macaca面向多端的自動化測試

wda的安裝和啟動

usbmux、libimobiledevice、usbmuxd及libusbmuxd

  • usbmux是蘋果的私有協議,蘋果設計該協議的原因是為了自家的macOS APP能夠和iDevice進行通信,從而實現諸如iTunes備份iPhone、Xcode真機調試等功能
  • libimobiledevice 是一個使用原生協議與蘋果iOS設備進行通信的庫,可以把iPhone端口映射到電腦端口,那么就可以通過訪問電腦的端口訪問到手機的端口了
  • libimobiledevice底層使用的是usbmuxd,usbmuxd(USB multiplexing daemon)是跨平台的與iOS設備多路復用連接的scoket守護進程,該進程的作用是建立本地端口和遠程端口的轉發,實現usb到tcp的轉換服務,根據相關usb協議,客戶端將請求包發送到usbmuxd進程,通過usbmuxd轉發到對方設備,實現tcp連接。而更底層用的是libusbmuxd,更詳細的可點擊查看項目中的介紹

安裝libimobiledevice

brew install libimobiledevice --HEAD

libimobiledevice常用命令

  • 端口轉發:iproxy xxxx yyyy(本地xxxx端口到設備的yyyy端口)
    如將本地8100端口映射到設備端口8100即iproxy 8100 8100,這樣就可以通過訪問電腦的端口訪問到手機的端口了
  • 查看設備系統日志idevicesyslog
  • 查看連接設備信息ideviceinfo

更多參看libimobiledevice Usage

iOS自動化

綜上,WDA會在iOS 端實現了一個 WebDriver server,並監聽網絡傳輸過來的webdriver協議的數據,通過電腦與手機端口的映射,我們就可以通過電腦發送網絡請求到手機上的server,server就能解析並處理點擊事件了

tidevice

因此我們需要做的是安裝並啟動WDA,設置端口轉發。在tidevice出現之前,WDA只能通過xcodebuild來啟動,而運行xcodebuild則必須有一台Mac才行。tidevice沒有通過xcodebuild,而是通過usbmuxd直接跟手機上的服務進行直接通信完成手機上WDA的啟動。usbmux在不同的平台都有開源的實現,所以tidevice不僅能在Mac上運行,也能在Linux、Windows上運行

  • 安裝WDA
    方法1:(必須mac)將iOS設備與一台Mac連接,然后使用xcode編譯源碼安裝,成功安裝WebDriverAgent即可脫離Mac
    方法2:使用tidevice的安裝命令,將開發者證書重簽名的WebDriverAgent.ipa安裝到iOS設備上

  • 運行WDA

  1. tidevice relay,轉發請求到手機,類似於iproxy如tidevice relay 8100 8100
  2. tidevice xctest,運行xctest
# 運行XCTEST
$ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner
[I 210127 11:40:23 _device:909] BundleID: com.facebook.wda.WebDriverAgent.Runner
[I 210127 11:40:23 _device:911] DeviceIdentifier: 12345678901234567890abcdefg
[I 210127 11:40:23 _device:773] SignIdentity: 'Apple Development: -Your-Developer-Name-'
[I 210127 11:40:23 _device:840] Launch 'com.facebook.wda.WebDriverAgent.Runner' pid: 239
[I 210127 11:40:23 _device:1003] ProductVersion: 12.4
[I 210127 11:40:24 _device:952] Start execute test plan with IDE version: 29
[I 210127 11:40:24 _device:875] WebDriverAgent start successfully

# 修改監聽端口為8200, 並顯示調試日志
$ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner -e USB_PORT:8200 --debug
  1. tidevice wdaproxy命令,wdaproxy這個命令會同時調用xctest和relay命令,另外當wda退出時,會自動重新啟動xctest
# 可通過tidevice applist來獲取wda的BundleID
# 運行 XCTest 並在PC上監聽8200端口轉發到手機8100服務
# facebook-wda
$ tidevice wdaproxy -B com.facebook.wda.WebDriverAgent.Runner --port 8200
# appium的wda
$ tidevice wdaproxy -B com.gameappium.WebDriverAgentRunner.xctrunner --port 8200

可通過在瀏覽器中訪問http://localhost:8200/status來查看WDA是否啟動成功
Linux和Windows因為默認沒有usbmux這個服務,提前安裝一下就可以。可以參考這個issue
啟動后你就可以使用Appium 或者 facebook-wda 來運行iOS自動化了

更多關於tidevice可參看tidevice

參考及擴展閱讀

更多知識可關注公號:CodeMonkeyJerry


免責聲明!

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



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