跨平台iOS自动化测试工具——tidevice
前言
一直以来,iOS
自动化的实现&执行都依赖 Mac
系统,其主要原因是因为需要通过 Xcodebuild
编译&安装 WDA (WebDriverAgent)
到 iOS
设备中,通过WDA
实现对被测应用进行操作。而Windows
系统无法运行Xcode
工具,所以无法运行iOS
自动化测试。
tidevice 简介
针对这种情况,阿里团队开源了一个内部使用的 iOS
自动化工具 :
tidevice (https://github.com/alibaba/taobao-iphone-device) 让我们可以更方便、简单的脱离Mac
的限制。
功能
该工具能够用于与iOS
设备进行通信, 提供以下功能
- 截图
- 获取手机信息
ipa
包的安装和卸载- 根据
bundleID
启动和停止应用 - 列出安装应用信息
- 模拟
Xcode
运行XCTest
,常用的如启动WebDriverAgent
测试(此方法不依赖xcodebuild
) - 获取指定应用性能(
CPU,MEM,FPS
) - 其他
- 支持运行在
Mac,Linux,Windows
上
tidevice核心原理
usbmux
通信协议:实现 Mac/Windows/Linux
与 iOS
设备服务间的通信
Mac
端:usbmuxd
是苹果的一个服务,这个服务主要用于在USB
协议上实现多路TCP
连接,将USB
通信抽象为TCP
通信。苹果的iTunes、Xcode
,都直接或间接地用到了这个服务。
Linux / Windows
端:本身是没有 usbmux
的,不过都有开源项目的实现,可以直接使用参考Windows
另外依赖 AppleApplicationSupport
和AppleMobileDeviceSupport
两个服务,安装Itunes
环境即可安装对应服务。
usbmux
本身是socket
套接字,通过截获、破解等手段,结合开源界的成果,用python
进行模拟,从而实现了当前工具已有的所有功能
tidevice安装
- Python 3.6+
- tidevice 安装
1
2pip3 install -U "tidevice[openssl]" (推荐)
pip3 install -U tidevice (缺少设备配对功能)
usbmuxd 安装
Mac
自带:/var/run/usbmux
Linux/Windows
: 参考官方建议的 https://github.com/alibaba/taobao-iphone-device/issues/7
tidevice 使用
查看版本号
1 | $ tidevice version |
列出连接设备
1 | $ tidevice list |
应用管理
1 | # 安装应用 |
设备管理
1 | # 重启 |
运行WDA
- 运行
WAD(WebDriverAgent)
之前首先需要将iOS
设备安装好WAD
应用,具体可以参考 Appium+Mac环境搭建 安装好之后使用命令查看WDA
名称:
1 | atx:~ atx$ tidevice applist |
- 打开命令窗口输入如下命令,注意修改端口号为
8200
,避免与WDA
默认端口8100
冲突。1
2
3
4
5
6
7
8
9
10
11atx:~ atx$ tidevice wdaproxy -B com.facebookWebDriverAgentRunner.xctrunner --port 8200
[D 210417 10:04:52 _wdaproxy:116] [6dd5e55bf4204cd5ad8042dc4exxxxxxxxx] launch WDA
[I 210417 10:04:53 _device:990] BundleID: com.facebookWebDriverAgentRunner.xctrunner
[I 210417 10:04:53 _device:992] DeviceIdentifier: 6dd5e55bf4204cd5ad8042dxxxxxxx
[I 210417 10:04:53 _device:834] SignIdentity: 'Apple Development: 技术部门 xx (WKQZHDVG49)'
[I 210417 10:04:53 _device:840] CFBundleExecutable: WebDriverAgentRunner-Runner
[I 210417 10:04:53 _device:871] AppContainer: /private/var/mobile/Containers/Data/Application/A2492414-BF14-4E2F-9130-5C50AB8E503E
[I 210417 10:04:54 _device:911] Launch 'com.facebookWebDriverAgentRunner.xctrunner' pid: 838
[I 210417 10:04:54 _device:1086] ProductVersion: 12.1.2
[I 210417 10:04:55 _device:1034] Start execute test plan with IDE version: 29
[I 210417 10:04:56 _device:947] WebDriverAgent start successfully
- 运行完成后在打开浏览器输入地址:
http://127.0.0.1:8200/status
查看返回内容,正常返回如下内容:
1 | { |
注意:目前已知的两个问题
- 不支持运行企业证书签名的
WDA
- 未认证的数据线可能导致
WDA
连接中断,建议使用原装苹果数据线。
- 运行WDA后启动
Appium
服务即可开始执行iOS
自动化测试。
Win环境运行注意事项
Win环境运行注意需要配置相关参数配置,另外需要安装好iTunes
具体如下:
automationName
:执行引擎,iOS设备需要设置为XCUITest
webDriverAgentUrl
:iOS
运行脚本中,需要配置webDriverAgentUrl
给appium driver
,才会不触发appium
内置的用xcode
启动wda
这个流程。否则只要触发这个,appium
就会找xcode
。windows
没有xcode
,自然跑不下去从而出现报错Error: The usbmuxd socket at '/var/run/usbmuxd' does not exist or is not accessible
usePrebuiltWDA
:使用已经编译好的WDA
这里填true
useXctestrunFile
:使用Xctestrun
文件启动WDA
。由于此功能期望您已经构建了WDA
项目,因此它既不会检查您是否具有必要的依赖关系来构建,WDA
也不会尝试构建项目。默认为false
。skipLogCapture
:跳过以开始捕获日志,默认为false
。
1 | { |