ATX2 iOS设备管理平台搭建
ATX2简介
前面分享了STF Andriod
设备远程管理平台的搭建和使用,但是STF不支持iOS
设备连接,虽然现在社区有了STF集成iOS
设备的开源方案,但是经过实践不太稳定,后面在Testerhome社区发现了一个新的框架ATX2
同时支持Android
和iOS
设备远程管理,经过实践设备连接非常稳定,所以这里分享下这个平台的搭建和使用。
ATX2是一款可以远程控制Android
和iOS
设备的设备管理平台。该平台使用的技术栈为:Python3+NodeJS+RethinkDB
项目目前已经开源,作者是阿里的一位大牛:codeskyblue
- 项目:Github地址:https://github.com/openatx/atxserver2
- 平台框架图如下所示:
环境准备
系统环境:Mac Os 10.14(因为要使用iOS设备连接WDA,所以需要Mac Os环境)
python3安装
1 | brew install python3 |
rethinkdb安装
1 | brew install rethinkdb |
服务部署
启动ATX2服务有2种方式:
- Docker部署
- 源码部署
Docker部署
- 使用Docker部署需要安装Docker,具体安装步骤见:Docker安装
- 下载项目文件:https://github.com/openatx/atxserver2
- 打开命令终端进入该项目目录
- 执行如下命令即可启动服务
1 | docker-compose up |
源码部署
1.启动rethinkdb服务器
1 | atxdeMac-mini:~ atx$ rethinkdb |
2.下载ATX2项目文件到本地: https://github.com/openatx/atxserver2
3.打开命令终端切换到该目录下,然后执行命令pip3 install -r requirements.txt
安装依赖。
4.启动服务,命令如下:
1 | #默认方式启动,使用默认的登录方式,默认端口 |
打开页面
启动之后,浏览器打开 http://localhost(本机ip也可以):4000
,登录之后就可以顺利的看到设备列表页了,由于还没有接入设备所以设备列表为空。
设备接入
ATX2可以支持连接Android
和iOS
设备,关于Android设备连接这里不细讲,可以参考:https://github.com/openatx/atxserver2-android-provider, 这里我们重点讲解iOS设备的连接。
libimobiledevice
libimobiledevice用于连接iOS设备,类似于Android
的adb
。使用如下命令进行安装:
1 | brew install libimobiledevice |
WebDriverAgent
WDA简介
WDA(WebDriverAgent)是适用于iOS
的WebDriver
服务器实现,可用于远程控制iOS
设备允许启动和终止应用程序,点击和滚动视图或确认屏幕上的视图存在。
这使其成为应用端到端测试或通用设备自动化的完美工具。它的工作原理是链接XCTest.framework
和调用Apple
的API
直接在设备上执行命令。WebDriverAgent
在Facebook
上开发并用于端到端测试,并被Appium
成功采用(做过Appium iOS自动化的同学相信对这个工具比较熟悉吧)。
这里需要下载ATX2
的fork
版本:https://github.com/openatx/WebDriverAgent
初始化WDA
进入到WDA
目录,使用如下命令初始化WDA
,该脚本会使用Carthage
下载所有的依赖,使用npm
打包响应的js
文件
1 | brew install carthage |
执行完成后,使用Xcode
直接双击打开WebDriverAgent.xcodeproj
这个文件。
设置证书
因为安装到真机上都是需要证书签名的,所以需要准备苹果开发者证书,可以使用公司的企业证书或者个人开发者证书(99美刀一年)
1.首先在TARGETS
里面选中WebDriverAgentLib
设置好证书
2.接着在TARGETS
里面选中WebDriverAgentRunner
,用同样的方法设置好证书。
3.如果是免费版的个人证书,还需要修改下WebDriverAgent
的BundleID
,随便加点后缀,只要不跟其他人的重名就好。
运行测试
1.菜单栏选择目标设备
2.Scheme
选择WebDriverAgentRunner
3.最后运行 Product -> Test
一切正常的话,手机上会出现一个无图标的WebDriverAgent
应用
注意:UI Testing
需要iOS9.0
以上系统版本,所以连接WDA
的设备最好是iOS9
以上系统版本。
4.此时Xcode
控制台界面可以看到设备的IP
。如果看不到的话,依次点击Xcode菜单 View->Debug Area->Activity Console
端口转发
1.有些国产的iPhone机器通过手机的IP和端口还不能访问,此时需要将手机的端口转发到Mac上。
1 | iproxy 8100 8100 |
2.打开浏览器输入http://localhost:8100
可以看到页面如下信息,说明WDA连接成功。
1 | { |
命令连接WDA
Xcode虽然可以使设备连接WDA,但是每次只能连接一台设备,而且该软件运行占用内存比较大,所以我们需要使用命令终端来运行WDA,这样方便我们进行自动化或持续集成。
注意:每台设备使用命令连接WDA时需要在xcode上面注册。
1.首先我们获取iOS设备的udid
1 | atxdeMac-mini:~ atx$ idevice_id -l |
2.然后执行如下命令来运行WDA
1 | xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=1d2c746769435ce0749f7f87b56f80abxxxxxx" test |
3.最后还是运行端口转发命令iproxy 8100 8100
WDA运行常见问题
安装失败
解决方法:遇到这个问题,说明手机上已经有一个WebDriverAgent
的应用了,只是BundleID
不一致,需要先将手机上的卸载掉,重新运行 Product -> Test
设备未信任
解决方案:进入 设置->通用->设备管理->开发者应
,然后点击信任,之后再重新运行一遍 Product -> Test
ios-provider
下载安装atxserver2-ios-provider,进入到该目录,执行如下命令即可连接iOS设备。
1 | #安装相关依赖 |
连接成功后,如下图所示可以看到连接的iOS设备,点击立即使用
即可远程控制。
证书签名问题
1 | CodeSign /Users/atx/Library/Developer/Xcode/DerivedData/WebDriverAgent-ciegwgvxzxdrqthilmrmczmqvrgu/Build/Products/Debug-iphoneos/WebDriverAgentLib.framework (in target 'WebDriverAgentLib' from project 'WebDriverAgent') |