這篇博文內容,是基於之前的配置而來的。我們可以先回顧一下之前博文,Windows搭建mac黑蘋果系統;WebDriverAgent重簽名爬坑記 。
今天來分享下如何通過 tidevice實現IOS自動化測試,在之前的博文,也有介紹過Airtest基本使用。針對Airtest暫且就不過多介紹了,今天主角是tidevice,具體我們來看。
tidevice
瞭解到tidevice,是在2021 MTSC 上海站 的議題中看到的,新知識,就來琢磨一番。
tidevice簡介
在使用工具之前,都得先了解下其特性,這樣才能更好的運用。
tidevice是阿里開源的一款工具,專案地址。詳細可以看專案中的描述,簡單概括就是,該工具基於python語言,可以跨平臺、開源脫離Mac進行IOS自動化測試。
tidevice命令
tidevice安裝
python版本3.6以上,使用命令
pip3 install -U "tidevice[openssl]"
安裝成功如下所示:
如果安裝失敗,可以使用命令(不過這種方法安裝,配對功能就沒有了,因為沒有辦法進行簽名)
pip3 install -U tidevice
檢視tidevice版本
tidevice version
列出連線裝置
tidevice list
tidevice list --json
操作如下所示:
應用管理
安裝應用
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
Run XCTest
執行XCTest
注意:在操作執行XCTest時,首先確保手機上安裝了可用的WebDriverAgent
tidevice xctest -B $WebDriverAgent重簽名的包名
包名可以通過 tidevice applist
命令檢視
執行日誌如下所示:
C:\Users>tidevice xctest -B com.yihuqingjiu.WebDriverAgentRunner.xctrunner
[I 211208 20:59:32 _device:912] BundleID: com.yihuqingjiu.WebDriverAgentRunner.xctrunner
[I 211208 20:59:32 _device:914] DeviceIdentifier: 0000XXXXX-XXXXXX01
[I 211208 20:59:32 _device:775] SignIdentity: 'Apple Development: XXXXXXXXXX'
[I 211208 20:59:32 _device:843] Launch 'com.yihuqingjiu.WebDriverAgentRunner.xctrunner' pid: 14259
[I 211208 20:59:32 _device:1006] ProductVersion: 15.0.2
[I 211208 20:59:33 _device:963] Test runner ready detected
[I 211208 20:59:33 _device:956] Start execute test plan with IDE version: 29
[I 211208 20:59:33 _device:878] WebDriverAgent start successfully
執行成功後,可以訪問:http://localhost:8200/status 檢視是否正常返回json資料,如下所示:
按之前的博文,訪問:http://localhost:8200/inspector 可以展示手機皮膚,但現在高系統版本已不支援。
修改監聽埠為8200, 並顯示除錯日誌
tidevice xctest -B $WebDriverAgent重簽名的包名 -e USB_PORT:8200 --debug
結合Airtest使用,操作到這裡就可以使用了,後面講解。
Relay
轉發請求
轉發請求到手機,類似於iproxy
tidevice relay 8100 8100
轉發並把傳輸內容print出來
轉發並把傳輸的內容用hexdump的方法print出來
tidevice relay -x 8100 8100
執行WebDriverAgent
執行 XCTest 並在PC上監聽8200埠轉發到手機8100服務
wdaproxy這個命令會同時呼叫xctest和relay,另外當wda退出時,會自動重新啟動xctest
tidevice wdaproxy -B $WebDriverAgent重簽名的包名 --port 8200
啟動後你就可以使用Appium 或者 facebook-wda 來執行iOS自動化了
這個點後續再細說。
檢視裝置資訊
裝置基本資訊
tidevice info
其他操作
rm cat pull push stat tree rmtree mkdir
tidevice fsync -h
其他常用
重啟
tidevice reboot
截圖
tidevice screenshot screenshot.jpg
輸出日誌
tidevice syslog
效能採集
命令列檢視
tidevice perf -B com.example.demo
Airtest
Airtest連線IOS裝置
在執行wda後,在airtest的裝置連線視窗,輸入命令連線裝置,命令如下:
http+usbmux://DeviceIdentifier
DeviceIdentifier 引數在執行wda後,視窗會顯示,複製過來即可。連線成功後,視窗展示如下,就可以操作app了。
到這裡,我們裝置已經連線好了,就可以開始碼程式碼了,具體的程式碼編寫demo官網也有。今天的demo就不細說了,也很簡單。
執行程式碼
簡單寫了個搜尋自己部落格的案例,如下所示:
# -*- encoding=utf8 -*-
__author__ = "wenyihuqingjiu"
from airtest.core.api import *
from poco.drivers.ios import iosPoco
auto_setup(__file__)
connect_device("iOS:///http+usbmux://00008110-XXXXXXXX801E")
poco = iosPoco()
snapshot()
poco("Safari瀏覽器").click()
touch(Template(r"tpl1630501963721.png", record_pos=(0.107, -0.565), resolution=(828, 1792)))
sleep(5.0)
touch(Template(r"tpl1630552947122.png", record_pos=(-0.296, -0.425), resolution=(828, 1792)))
text("溫一壺清酒 部落格園")
touch(Template(r"tpl1630553104752.png", record_pos=(0.357, -0.43), resolution=(828, 1792)))
touch(Template(r"tpl1639144259796.png", record_pos=(-0.213, -0.623), resolution=(1170, 2532)))
sleep(5.0)
assert_exists(Template(r"tpl1630553184115.png", record_pos=(0.019, -0.488), resolution=(828, 1792)), "進入部落格首頁")
我們執行程式碼,來看一下效果,如下所示,畫質不是太好
生成報告
程式碼執行結束後,可以直接生成報告,我們生成報告看一下效果,每一步操作都有記錄並截圖,如下所示:
報錯總結
執行tidevice命令,提示無法連線
tidevice安裝後,執行命令 tidevice list
,報錯如下所示:
該問題,下載itunes 得到解決。
啟動wda,提示Could not start service
啟動wda時,會提示Could not start service,報錯如下:
該問題是在下載版本zip的時候失敗了,所以啟動失敗。當下載成功的時候,就啟動成功了,如下所示:
airtest連線真機失敗
通過airtest連線真機時,報錯提示如下:
在確定airtest是最新版本的情況下,使用最新webdriveragent重簽名了包,再次連線就正常了。