大家好,我是麥小米,是狂師老師全棧測開訓練營中的一名學員。
如果之前做過iOS
自動化的同學相信都知道,一直以來,iOS
自動化的實現&執行都必須依賴 Mac
系統,其主要原因是因為需要通過 xcodebuild
編譯&安裝WDA (WebDriverAgent)
到 iOS
裝置中,通過WDA
實現對被測應用進行操作。導致想要做iOS自動化 就必須擁有 Mac 裝置的現象。
作為一名測開新手,在學習完移動端自動化測試後,興致滿滿要實踐一番,無奈公司只配備了windows電腦,怎樣進行iOS自動化測試成了一大難題,而今天給大家分享一款新面市不久的iOS自動化工具:tidevice
,正好是彌補了這塊空缺。
一、tidevice介紹
tidevice 是阿里內部小組前不久,剛開源的一款針對用來做iOS自動化測試用途的工具,可用於iOS
應用的效能採集和UI自動化。不依賴Xcodebuild
,可以執行在 Mac
,Linux
,Windows
上,即使你沒有Mac電腦,也能跑iOS自動化。
一句話概況:tidevice
它是一款跨平臺的自動化開源工具,不依賴 Xcode 就可以啟動 WebDriverAgent( WDA )
,這也就意味著以後在Windows 可以直接執行 iOS 自動化指令碼了。
專案地址:
https://github.com/alibaba/taobao-iphone-device
二、tidevice能些什麼?
從上述的介紹中,可以知道tidevice定位就是一款iOS
自動化測試工具,主要用途有:
- iOS UI自動化測試
- 裝置資訊獲取
- 應用安裝、解除安裝、啟動、停止、檢視應用資訊、已安裝應用列表
- 啟動 WebDriverAgent (不依賴 xcodebuild , 跨平臺)
- 效能資料採集
- 裝置截圖、裝置日誌等
三、 tidevice自動化環境準備
1.安裝tidevice(依賴Python3.6+)
pip3 install -U "tidevice[openssl]" (推薦)
pip3 install -U tidevice (缺少裝置配對功能)
2.檢視是否安裝成功
tidevice -v
3.在裝置上安裝WebDriverAgent
除了上述兩步,要完成 iOS 端的自動化,我們還需要做一些準備工作
- 3.1 . 下載WebDriverAgent,將 WebDriverAgent 安裝到 iOS 裝置上,通過它驅動手機進行一系列自動化操作,由於 Facebook WDA 很長時間沒有更新了,這裡建議直接使用 Appium WDA
https://github.com/appium/WebDriverAgent
-
3.2. 切換到WebDriverAgent目錄下,執行
./Scripts/bootstrap.sh
-
3.3. 依賴安裝完成後,雙擊
WebDriverAgent
目錄下的WebDriverAgent.xcodeproj
在Xcode中開啟 -
3.4. WebDriverAgent的
Bundle Identifier
更改為自己命名的Identifier -
3.5. WebDriverAgentLib的
Bundle Identifier
更改為自己命名的Identifier -
3.6. WebDriverAgentRunner的
Bundle Identifier
更改為自己命名的Identifier -
3.7. 連線手機,點選Bulid
- 3.8. 提示Build Succeeded表示成功,點選Product-->Test
- 3.9. 提示Succeeded後開啟手機-通用-裝置管理-點選信任即可。
四、tidevice常用功能
準備好上述環境後,將 iPhone 裝置連線到電腦上,就可以使用 tidevice 提供的功能了
1. 檢視已連線裝置列表
tidevice list
# json資料顯示
tidevice list --json
由於tidevice 支援的所有cmd命令 都是在 tidevice.main 中定義實現,可以直接與自己的工程程式碼整合在一起。
Python程式碼:
from tidevice import Usbmux
print(Usbmux().device_list())
利用tidevice info
可以檢視裝置資訊,比如:裝置序列號、系統版本、CPU、本機號碼、時間戳、藍芽地址、MAC 地址等資訊
2. 檢視手機上安裝的應用
tidevice applist
Python程式碼:
from tidevice import Device
Instruments = Device("udid").connect_instruments()
# 裝置上全部App資訊列表 包含 系統應用和外掛,通過 Type 可以區分App
apps = instruments.app_list()
# 只篩選使用者安裝的App列表
user_app_list = [app for app in apps if app["Type"] == "User"]
3. 安裝、解除安裝應用
tidevice 支援安裝本地 ipa 包和遠端包,另外,tidevice 可以使用「 --udid 」引數將應用安裝到某一臺裝置中
# 安裝本地應用
tidevice install test.ipa
# 根據udid引數,指定裝置安裝應用
tidevice --udid $UDID install https://xxx.org/mikezhou.ipa
# 解除安裝應用(通過包名)
# 比如:微信App包名為:com.tencent.xin
tidevice uninstall com.tencent.xin
Python程式碼:
from tidevice import Device
Device("udid").app_install(ipa_url_or_path)
4. 獲取裝置資訊
tidevice info
Python程式碼:
from tidevice import Device
# 內容會比cmd 全很多, 但是需要理解每個欄位的含義
Device("udid").device_info()
檢視裝置電源資訊
tidevice info --domain com.apple.mobile.battery --json
可以執行 ideviceinfo -h
檢視都有哪些domain
。
5. fps 資料採集
tidevice dumpsfps
四.執行自動化測試
在執行iOS自動化測試之前,首先要提前將 WDA 安裝到 iOS裝置中 並在設定中信任開發者,確保WDA可以正常啟動,並且知道bundleId
。
1、啟動WDA
真機裝置安裝完 WDA 後,就可以脫離 Mac,使用 Windows 進行自動化操作了
tidevice -u(裝置 udid)wdaproxy -B(wda 的 bundleId) --port 8100
# 只連線了一臺手機,例如:
tidevice wdaproxy -B com.facebook.WebDriverAgent1.xctrunner --port 8100
當看到以下資訊表示啟動成功
此時可以訪問http://127.0.0.1:8100/status
2.weditor安裝檢視元素工具
# weditor安裝
pip3 install -U weditor
# weditor啟動
控制檯輸入weditor或者python3 -m weditor
3.檢視元素
-
Windows: cmd-->ipconfig-->獲取本機ip,系統選擇iOS,輸入http://本機ip:8100,點選Connect
-
Mac電腦:系統選擇iOS, 輸入http://localhost:8100,點選Connect
- 接下來,就可以使用 Appium 或 facebook-wda 編寫指令碼並執行到 iOS 裝置上了,首先,我們安裝對應的依賴,比如安裝facebook-wda依賴
pip3 install -U facebook-wda
接著,以酷狗App為例,編寫自動化指令碼並執行測試,程式碼如下:
# -*- coding:utf-8 -*-
import wda
import allure
d = wda.USBClient()
class TestDemo:
def setup(self):
d.session('com.kugou.kugou1002')
def test_loginDemo(self):
with allure.step('點選我的'):
d(label='我的').click_exists(10)
with allure.step('點選登入'):
d.xpath('//*[@label="空列表"]/Other[1]/Button[1]/StaticText[3]').click_exists(10)
with allure.step('點選其他登入方式'):
d(label="其他登入方式").click_exists(10)
with allure.step('輸入賬號'):
d.xpath('//*[@label="帳號"]/following-sibling::*[1]').get(10).set_text('17622222333')
with allure.step('輸入密碼'):
d.xpath('//*[@label="密碼"]/following-sibling::*[1]').get(10).set_text('000000')
with allure.step('點選登入'):
d.xpath('//*[@label="密碼"]/parent::*/parent::*/following-sibling::*[2]').click_exists(10)
assert d(label="請先勾選頁面下方的“同意《使用者協議》和《隱私政策》”").wait(10) != None
def teardown(self):
d.app_stop('com.kugou.kugou1002')
五. 最後
阿里開源的tidevice
這款工具,佔用記憶體小,且支援跨平臺,使iOS自動化擺脫了Mac的限制,也給iOS自動化方案建設更多的可能性,但由於剛開源不久,可能還存在一些不穩定的因素,但這並阻止不了大家嚐鮮的腳步。