开发者社区> 大刚测试开发实战> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 开源云真机平台Sonic(Windows端)接入iOS设备实践过程,及相关注意事项。
+关注继续查看

背景

在前面的文章中,我分享了《开源云真机平台-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.克隆项目

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

image

② 修改WebDriverAgentRunner

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

image

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

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

image

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

image

image

④ 构建

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

image

⑤ 运行测试

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

image

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

image

三、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

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

image

2.安装Sib

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

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

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

image

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

c:\sonic-ios-bridge>sib devices
00008020-000E74E622BA002E online

3.Agent配置

修改Agent配置文件

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

com.appium8888.WebDriverAgentRunner
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 并回车,再输入以下指令:

java -Dfile.encoding=utf-8 -jar sonic-agent-windows-x86_64.jar

image

4.前台访问使用

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

image

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

image

image

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

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

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

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

2.设备连接异常

忘记当时是怎么操作的了

image

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

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

image

4.初始化时间略长

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

附:

1.Ubuntu(Agent端)解决方法

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

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

宿主机安装sib

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

image

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

image

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

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

image

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

apt-get install usbmuxd
chmod 777 -R /var/run/usbmuxd
docker restart sonic-agent_sonic-agent_1

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

image

解决方法参考:

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及以上版本中

pip3 install -U "tidevice[openssl]"

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

image

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

安装pep517

pip install pep517

再次安装cryptography

pip install cryptography

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

升级pip

pip3 install -U pip

pip升级到22.3.1

image

安装cryptography

再次安装cryptography,安装成功

image

安装tidevice

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

image

查看tidevice版本:

[root@sonic bin]# tidevice version
tidevice version 0.9.12

tidevice查看设备列表

tidevice list

image

总结

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

连接iOS设备的前提

image

关键步骤

  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. 前台访问使用;




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS开发- 添加地址从通讯录中选择添加(firstName,lastName真机为nil,模拟器正常)
iOS开发- 添加地址从通讯录中选择添加(firstName,lastName真机为nil,模拟器正常)
0 0
IOS 联真机签名解决方案
IOS 联真机签名解决方案
0 0
提高iOS云真机稳定性的方法(二)
为了提高iOS云真机的稳定性,除了上篇文章《提高iOS云真机稳定性的方法(一)》中讲到电量、存储和清理第三方应用外还需要对iOS手机本身做一些额外的设置。
0 0
iOS真机安装WebDriverAgent图文详解
在做iOS自动化测试的时候,一般都需要确保手机上已经安装有WebDriverAgent应用,这个WDA应用可以是Airtest修改版、Appium修改版也可以是Facebook原版,今天我们以Appium修改版为例来进行说明,其他版本同样适用。
0 0
提高iOS云真机稳定性的方法(一)
最近半年投入了比较多的精力在手机机房的建设,踩了不少坑,也积累了很多经验,接下来会分几个篇幅跟大家分享一些比较简单实操的小技巧来提高云真机的稳定性,今天主要讲讲iOS端如何做电量、存储监控以及清理第三方应用。
0 0
iOS自动化真机测试验证环境过程中常见问题解析
本章节主要讲解 iOS 自动化真机配置以及在 iOS 真机执行自动化时常见问题与解决方法。 ## 真机使用的Capability 与模拟器不同,真机测试需要如下的 Capability 方式一:设置 App 路径,启动 App(自动安装 App) ``` { "app": "/Users/seveniruby/Library/Developer/Xcode/DerivedData/UI
0 0
如何使用谷歌浏览器远程调试安卓/ios真机H5应用?
公司今年开始着手移动办公,将部分原来需要在PC端操作的功能逐渐增加到了移动端,开发了很多的H5报表。因为是内部用的功能,在测试的时候也没有可以去关注兼容性和一些app端的专项测试,我们只是负责测试自己部门开发的轻应用,接入到公司的平台中能不能正常使用。
0 0
干货|一款实用iOS云真机的技术架构是如何搭建的?
对移动开发者来说,无论是开发、调试、测试、还是上线前后检验效果,都离不开测试机,甚至是产品、运营和客服,也时不时需要使用真机进行产品体验、产品运营。传统渠道上,开发者只能通过采购设备满足各部门测试需求。然而随着业务的发展,这种方式的缺陷越来越凸显:稀缺机型抢手、设备数量不足、费用高企、资源利用率不高等。
0 0
这可能是市面上最好用的iOS云真机
最好用的iOS云真机,是怎么实现的呢?快来了解下吧!
0 0
iOS开发:下架App的步骤
首先登陆你的 iTunes Connect
0 0
+关注
大刚测试开发实战
公众号《测试开发实战》作者,专注软件测试领域,热爱测试技术,热衷测试分享,持续学习、持续输出、持续落地!
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Facebook iOS App技术演化十年之路
立即下载
From Java_Android to Swift iOS
立即下载
深入剖析 iOS 性能优化
立即下载