天天看點

新工具開源!一款iOS自動化利器(附位址)tidevice可以幫你做什麼呢?安裝常用指令啟動WebDriverAgent運作 UITests總結

tidevice 是阿裡的内部的一個小組用來做 iOS 自動化用的工具,通過逆向iOS通信協定,使用純Python實作。目前淘寶和其他部分事業部已經全面使用了該技術,進行iOS應用的性能采集,UI自動化。

注:這裡的被測應用無需做任何修改,使用不再局限于Mac上。

開源位址:

https://github.com/alibaba/taobao-iphone-device

tidevice可以幫你做什麼呢?

  • 應用安裝,啟動,停止,檢視
  • 啟動 WDA(WebDriverAgent)(注:該操作不依賴xcodebuild,可跨平台使用)
  • 運作UITests (跨平台使用)
  • 性能采集(類似 PerfDog)
  • 截圖、syslog采集 等等

熟悉libimobiledevice工具集的同學可能知道大部分上面提到的功能,為了友善日常的使用tidevice對libimobiledevice中已有的功能也重新實作了一遍(比如 截圖,看日志,應用安裝),這樣有tidevice你就可以完成日常所有相關的操作了。

除了這些衆所周知的功能,tidevice還可以完成WDA的啟動,iOS裝置的性能采集。

可能有人不知道WDA為何物,這裡簡單的介紹一下。WDA全名WebDriverAgent是facebook推出的可以實作黑盒iOS自動化的項目。該項目作為一個App運作在iOS手機上,被測應用不需要做任何的更改(比如接入sdk),進行無侵入的測試。唯一不友善的是手機必須連接配接上Mac電腦,并使用Mac上才有的xcodebuild才能将WDA這個App運作起來,這也導緻其推廣起來比較困難。

文章中會重點介紹一下tidevice 如何完成WDA的啟動。原理比較簡單:tidevice通過模拟xcodebuild與手機進行通信,向手機發送特定的指令,來啟動WDA,進而可以脫離Mac的限制,能夠在Linux、Windows上運作起來iOS自動化,而在tidevice出現之前,這些是無法做到的。

安裝

因為是Python項目,一條指令即可完成安裝  pip3 install -U tidevice安裝完成後,先執行幾個指令測試一下tidevice version  檢視tidevice版本tidevice list 檢視已經連接配接上的iPhone裝置

常用指令

安裝應用

tidevice install example.ipa 通過URL安裝應用 (實際使用時網址要改成正确的)tidevice install 

http://example.org/demo.ipa

應用啟動tidevice launch com.apple.Preferences 截圖tidevice screenshot screenshot.jpg 檢視系統日志tidevice syslog 其他常用的指令幫助指令檢視,基本上常用的指令都有了tidevice -h

啟動WebDriverAgent

目前iOS的黑盒自動化,最流行的方法是通過WDA來實作的。在tidevice出現之前,WDA隻能通過xcodebuild來啟動,而運作xcodebuild則必須有一台Mac才行。

tidevice沒有通過xcodebuild,而是通過usbmuxd直接跟手機上的服務進行直接通信完成手機上WDA的啟動。usbmux在不同的平台都有開源的實作,是以tidevice不僅能在Mac上運作,也能在Linux、Windows上運作。

新工具開源!一款iOS自動化利器(附位址)tidevice可以幫你做什麼呢?安裝常用指令啟動WebDriverAgent運作 UITests總結

關于usbmux通信協定這部分,蘋果當然不會告訴直接告訴我們。不過因為usbmux本身就是socket套接字,是以我們可以直接截獲其中的内容,然後根據開源界已有的成果,其中大部分的内容已經被破解了。先用xcodebuild完成一次WDA的啟動,然後找到關鍵的通信内容,再用python來模拟回放一遍,就可以抛棄xcodebuild不用了。 相對于xcodebuild啟動,tidevice因為通信内容更精簡,是以啟動速度更快(2s左右),另外也更穩定。

說了一堆理論,我們看一下怎麼使用的吧

前提條件

  1. 資料線将 iPhone 手機連接配接到 PC 上
  2. 手機上已經有WebDriverAgent這個 App 了。這個可以通過 xcode 編譯源碼安裝,也可以用開發者證書重簽名的 WebDriverAgent.ipa 安裝到手機。
  3. Linux和Windows因為預設沒有usbmux這個服務,提前安裝一下就可以。可以參考這個issue: https://github.com/alibaba/taobao-iphone-device/issues/7

前提條件OK了的話,像下圖這樣執行指令就可以将WDA啟動起來了。

新工具開源!一款iOS自動化利器(附位址)tidevice可以幫你做什麼呢?安裝常用指令啟動WebDriverAgent運作 UITests總結
新工具開源!一款iOS自動化利器(附位址)tidevice可以幫你做什麼呢?安裝常用指令啟動WebDriverAgent運作 UITests總結

而驗證WDA是否工作最簡單的辦法就是打開浏覽器,網站:http://localhost:8100/status能看到下面的輸出說明WDA工作正常了

新工具開源!一款iOS自動化利器(附位址)tidevice可以幫你做什麼呢?安裝常用指令啟動WebDriverAgent運作 UITests總結
新工具開源!一款iOS自動化利器(附位址)tidevice可以幫你做什麼呢?安裝常用指令啟動WebDriverAgent運作 UITests總結

或者也可以直接使用Appium排程

新工具開源!一款iOS自動化利器(附位址)tidevice可以幫你做什麼呢?安裝常用指令啟動WebDriverAgent運作 UITests總結

運作 UITests

有些使用者的開發能力可能比較強,習慣直接用OC或者Swift直接寫UI自動化用例。通過tidevice也支援的。 網上找了一個OC寫的XCTest UITests demo項目

https://github.com/FeiHuang93/XCTest-Demo

使用xcode編譯安裝到手機上之後,有兩個應用

testXCTestUITests  執行測試的應用testXCTest 被測應用

使用下面的指令執行即可

tidevice xctest --bundle-id philhuang.testXCTestUITests.xctrunner --target-bundle-id philhuang.testXCTest

新工具開源!一款iOS自動化利器(附位址)tidevice可以幫你做什麼呢?安裝常用指令啟動WebDriverAgent運作 UITests總結

将被測應用和執行測試應用打包成ipa後,就可以在多個的手機上運作了。

總結

現在這個項目在阿裡内部目前用的還不錯,希望歡迎多多試用回報。如果好用的話,希望可以留下你的Star