首頁>技術>

孫聖翔 淘系技術

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上執行。

關於usbmux通訊協議這部分,蘋果當然不會告訴直接告訴我們。不過因為usbmux本身就是socket套接字,所以我們可以直接截獲其中的內容,然後根據開源界已有的成果,其中大部分的內容已經被破解了。先用xcodebuild完成一次WDA的啟動,然後找到關鍵的通訊內容,再用python來模擬回放一遍,就可以拋棄xcodebuild不用了。

相對於xcodebuild啟動,tidevice因為通訊內容更精簡,所以啟動速度更快(2s左右),另外也更穩定。

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

前提條件

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

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

而驗證WDA是否工作最簡單的辦法就是開啟瀏覽器,網站:

http://localhost:8100/status

能看到下面的輸出說明WDA工作正常了

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

執行 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

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

總結

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

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 基於單鏈表實現的棧解題-LeetCode