前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开源云真机平台Sonic(Windows端)接入iOS设备实践

开源云真机平台Sonic(Windows端)接入iOS设备实践

作者头像
大刚测试开发实战
发布2023-01-18 15:04:46
2.8K0
发布2023-01-18 15:04:46
举报

背景

在前面的文章中,我分享了《开源云真机平台-Sonic应用实践》、《开源云真机平台Sonic跨版本升级实践》。目前sonic版本已经升级到了最新的2.0.5,但我接入的都是些Android设备,iOS设备之前也尝试过接入,但没有成功,因为我用的是CentOS系统。这两天又用Windows系统重新试了一下,终于成功接入了。下面简单分享一下实践过程以及其中的一些注意事项。

一、准备工作&注意事项

  1. Agent必须部署在Mac/Ubuntu/Windows系统,CentOS系统不支持接入iOS设备(这也是我之前一直尝试失败的原因);
  2. 必须得有一台Mac系统的电脑,且Mac电脑中安装了Xcode,因为前期要构建WebDriverAgent包到iOS设备中,后面可以脱离Mac使用;
  3. 必须得有个苹果开发者账号,且当前iOS设备的UDID已添加到此开发者账号下,这样才能构建WDA(WebDriverAgent);
  4. 如果iOS设备准备接入在Windows或Ubuntu系统的Agent上,需要安装:
  • usbmux:这个服务主要用于在USB协议上实现多路TCP连接,将USB通信抽象为TCP通信。苹果的iTunes、Xcode,都直接或间接地用到了这个服务。所以Windows上可以通过直接安装iTunes来解决,Ubuntu需要单独安装;
  • sib:即sonic-ios-bridge,sonic与iOS设备之间的通信桥梁,类似于ADB(Android Debug Bridge)。当然安装淘宝开源的tidevice也就可以,方便查看设备状态以及调试;

二、Mac端工作

有了以上条件,我们就可以执行iOS接入Sonic的相关工作了。接入过程主要分为以下步骤:

  1. 克隆WebDriverAgent项目到Mac电脑;
  2. 在Xcode中打开克隆的WebDriverAgent项目,并修改相关信息(后面会具体提到);
  3. 构建WebDriverAgent包到iOS设备;

1.克隆项目

代码语言:javascript
复制
git clone https://github.com/appium/WebDriverAgent 
或 
git clone https://github.com/SonicCloudOrg/sonic-ios-wda.git

2.修改WebDriverAgent相关信息

在Mac电脑的Xcode中打开克隆的WebDriverAgent项目,按照如下修改:

① 修改WebDriverAgentLib

Team选择你自己的或者公司的开发者账号,Bundle Identifier改成你自己的名字,不要用原来的,名字任意,例如:com.appium8888.WebDriverAgentLib

② 修改WebDriverAgentRunner

Team仍然选择你自己的或者公司的开发者账号,Bundle Identifier改成你自己的名字,与前面一步修改的保持一致,例如:com.appium8888.WebDriverAgentRunner

③ 选择要构建的包以及iOS设备

记住,一定选的是WebDriverAgentRunner,而不是IntegrationAPP或其他!

我一开始就是默认选了IntegrationAPP导致后面能连接上Server,前台也能看到手机,但是使用不了,一直卡在准备图像中。此时Agent控制台能看到一句提示“com.dagangtest.WebDriverAgentRunner.xctrunner is not in your device!”,如果有这句报错提示,就表明你在选择构建包的时候选择错了!接入Mac再重新选择WebDriverAgentRunner打包构建即可。

④ 构建

顶部Product--Build,成功的话Xcode会提示Build Successed!

⑤ 运行测试

顶部Product--Test,首次运行的话可能会失败,需要在手机上弹出的提示框中点击“信任”设备,再次运行即可。运行成功的话,Xcode会自动将WebDriverAgentRunner包打进iOS设备:

手机上会出现WebDriverAgentRunner APP以及“Automation Running”的浮动水印提示。

三、Windows(Agent端)工作

我之前就是用CentOS端的Agent来接入iOS设备,所以屡屡碰壁。如果你也有这个想法,劝你尽早放弃!我现在已转投Windows怀抱来接入iOS。不过也不用那么悲观,一个Server可以连接多个Agent,CentOS端的Agent用来接入Android设备是完全没问题的。

所以特此声明:以下演示均以Windows为案例,Ubuntu系统未具体尝试,仅提供部分参考思路。

上面打包好WebDriverAgentRunner到iOS手机后,iOS就可以脱离Mac运行,在Windows以及Ubuntu系统上也可以丝滑地开展自动化测试了!Windows/Ubuntu端工作主要分为以下步骤:

  1. 安装iTunes;
  2. 安装sib工具;
  3. Agent配置:修改Agent配置文件,填写WebDriverAgent的bundle-id(包名),插上iOS设备,重启Agent容器;
  4. 检查前台页面是否成功显示以及能否正常使用;

1.安装iTunes

安装iTunes的目的主要是为了安装usbmux以及相关的依赖环境,前面已经提到usbmux这个服务主要用于在USB协议上实现多路TCP连接,将USB通信抽象为TCP通信。苹果的iTunes、Xcode,都直接或间接地用到了这个服务。所以Windows上可以通过直接安装iTunes来解决(通过爱思助手之类的应该也可以),Ubuntu需要单独安装usbmux;

连接手机打开iTunes

首次连接,在手机的提示框中选择信任设备,随后即可连接成功:

2.安装Sib

sib和tidevice两个安装任意一个即可。sib安装比较简单,直接从官网下载下来解压即可,如果想要全局运行就配置个环境变量。

项目地址:https://github.com/SonicCloudOrg/sonic-ios-bridge

下载下来,解压后得到如下文件:

cmd命令行,进入sib.exe所在文件夹,执行以下命令,即可查看当前电脑连接的iOS设备,设备若在线,显示为online。

代码语言:javascript
复制
c:\sonic-ios-bridge>sib devices
00008020-000E74E622BA002E online

3.Agent配置

修改Agent配置文件

主要是修改iOS模块的wda-bundle-id,改为前面在Xcode中修改后的名称,例如:com.appium8888.WebDriverAgentRunner

代码语言:javascript
复制
sonic:
  agent:
    # 替换为部署Agent机器的ipv4
    host: 192.168.1.188
    # 替换为Agent服务的端口,可以自行更改
    port: 7777
    # 替换为前端新增Agent生成的key
    key: 774ed0c0-b8d6-4bcb-8a68-36bb67d51691
  server:
    # 改成server的SONIC_SERVER_HOST
    host: 192.168.1.20
    # 改成server的SONIC_SERVER_PORT
    port: 3000

modules:
  android:
    # 是否开启安卓模块
    enable: true
    # 是否开启sonic-android-supply远程adb调试功能
    use-sas: true
  ios:
    # 如果不需要连接iOS设备,请将true改为false。开启的windows用户请确保本机已安装iTunes
    enable: true
    # 替换为你自己使用的wda的bundleId,如果没有.xctrunner后缀会自动补全,建议使用公司的开发者证书
    wda-bundle-id: com.dagangtest.WebDriverAgentRunner
  sgm:
    # 是否开启sonic-go-mitmproxy网络抓包功能
    enable: true
重启Agent

windows用户,要先在控制台输入 chcp 65001 并回车,再输入以下指令:

代码语言:javascript
复制
java -Dfile.encoding=utf-8 -jar sonic-agent-windows-x86_64.jar

4.前台访问使用

可以看到,两台iOS设备:iPhone XR和iPhone 7已经接入成功:

分别使用两台设备,操作正常

四、iOS使用过程中的一些问题

尽管sonic已经成功接入了iOS设备,但在使用过程中,还是存在诸多问题,远没有Android设备体验流畅。

1.连接超时、拖拽反应过慢

有时候点击事件正常,但拖拽事件会卡半天,然后突然反应过来、把之前积压的事件全部执行了一遍。不知道是不是连接超时的问题。

2.设备连接异常

忘记当时是怎么操作的了

3.无法进入使用页面,设备被占用

点击“马上使用”,打开了一个新标签页,随后该标签页立马消失,但列表中该设备处于被占用状态,导致无法再进入使用页。只能重启Agent或是重新插拔设备。在Android设备上也遇到过,退出使用界面,刷新后,设备仍处于被占用,能不能加一个“强制关闭”按钮操作呢?

4.初始化时间略长

每次退出再进入设备,都要初始化一遍,初始化时间略长,不知道这个能不能优化一下。

附:

1.Ubuntu(Agent端)解决方法

Ubuntu系统因资源限制,未具体尝试,仅提供部分参考思路。

Ubuntu也是属于Linux系统的一种,我当时是用CentOS试的,出现过下列问题,试了很多种方法,始终没有连成功,最终放弃了。但我看过一些帖子,据说Ubuntu按照以下方法解决后是可以连接成功的

宿主机安装sib

Ubuntu系统的Agent一般是用docker方式部署的,docker容器中是有sib工具的,但在宿主机上也要安装sonic-ios-bridge

下载后解压,进入sib所在目录,执行sib,即可查看相关帮助命令:

宿主机安装usbmuxd、挂载iOS设备

若Agent容器所在的宿主机连接iOS设备后,没有挂载上,执行sib devices命令,可能会出现如下提示:

解决办法:宿主机和容器里面分别安装一遍usbmuxd,并赋予该目录最大权限,重启agent容器

代码语言:javascript
复制
apt-get install usbmuxd
chmod 777 -R /var/run/usbmuxd
docker restart sonic-agent_sonic-agent_1

如果还不行,就kill掉然后重启usbmuxd进程,或是直接重启系统。

解决方法参考:

https://sonic-cloud.wiki/d/1754-dockerv150-releaseagentiosios-ios

https://sonic-cloud.wiki/d/1402-v141ioswdaagentwda-bundle-iddocker-composeios/15

https://blog.csdn.net/LiXueFu727224204/article/details/126914938?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-0-126914938-blog-122413079.pc_relevant_recovery_v2&spm=1001.2101.3001.4242.1&utm_relevant_index=3

2.tidevice安装方法

tidevice相比sib安装起来确实麻烦一些,首先要确保当前系统已安装Python3环境,然后才能安装tidevice。目前 tidevice 库仅支持安装在 python3.7及以上版本中

代码语言:javascript
复制
pip3 install -U "tidevice[openssl]"

安装过程中可能会出现如下报错:

通过上图可以看出,是因为tidevice在安装过程中,安装一个名为cryptography的包时,报错了,cryptography编译失败,因为系统中缺少pep517。

安装pep517
代码语言:javascript
复制
pip install pep517

再次安装cryptography

代码语言:javascript
复制
pip install cryptography

但是还是报错上述同样错误,系统提示pip版本过低。于是升级pip。

升级pip
代码语言:javascript
复制
pip3 install -U pip

pip升级到22.3.1

安装cryptography

再次安装cryptography,安装成功

安装tidevice

再次执行pip3 install -U "tidevice[openssl]" 安装tidevice,安装成功

查看tidevice版本:

代码语言:javascript
复制
[root@sonic bin]# tidevice version
tidevice version 0.9.12
tidevice查看设备列表
代码语言:javascript
复制
tidevice list

总结

以上就是Windows端Agent接入iOS设备的全过程,提供了Ubuntu系统接入过程中出现问题的参考解决方案,以及tidevice的安装方法。下面作个简单总结:

连接iOS设备的前提

关键步骤

  1. 克隆WebDriverAgent项目到Mac电脑;
  2. 在Xcode中打开克隆的WebDriverAgent项目,并修改相关信息;
  3. 构建WebDriverAgent包到iOS设备;
  4. Windows安装iTunes;
  5. Windows安装sib工具;
  6. Windows端Agent配置:修改Agent配置文件,填写WebDriverAgent的bundle-id(包名),插上iOS设备,重启Agent容器;
  7. 前台访问使用;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 一、准备工作&注意事项
  • 二、Mac端工作
    • 1.克隆项目
      • 2.修改WebDriverAgent相关信息
        • ① 修改WebDriverAgentLib
        • ② 修改WebDriverAgentRunner
        • ③ 选择要构建的包以及iOS设备
        • ④ 构建
        • ⑤ 运行测试
    • 三、Windows(Agent端)工作
      • 1.安装iTunes
        • 连接手机打开iTunes
      • 2.安装Sib
        • 3.Agent配置
          • 修改Agent配置文件
          • 重启Agent
        • 4.前台访问使用
        • 四、iOS使用过程中的一些问题
          • 1.连接超时、拖拽反应过慢
            • 2.设备连接异常
              • 3.无法进入使用页面,设备被占用
                • 4.初始化时间略长
                • 附:
                  • 1.Ubuntu(Agent端)解决方法
                    • 宿主机安装sib
                    • 宿主机安装usbmuxd、挂载iOS设备
                  • 2.tidevice安装方法
                    • 安装pep517
                    • 升级pip
                    • 安装cryptography
                    • 安装tidevice
                    • tidevice查看设备列表
                • 总结
                  • 连接iOS设备的前提
                    • 关键步骤
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档