Airtest結合tidevice實現IOS自動化測試

溫一壺清酒發表於2021-12-14

這篇博文內容,是基於之前的配置而來的。我們可以先回顧一下之前博文,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重簽名了包,再次連線就正常了。

相關文章