远程usb端口映射_干货分享:iOS真机远程APP测试技术实践

背景

iOS多机远程控制技术目前业界初步也有了一些方案,可以让APP在远程iPhone上面安装操作,对于设备兼容性测试是一款很好的服务,但是就体验上还是存在UI截屏延迟,设备掉线,稳定性不高的问题,尤其对于远程手机桌面的滑动,长按操作,全屏视频播放等,成本上多数是通过一台mac挂载一台iPhone来提供服务,显然较为昂贵。另外,APP除了业务功能测试外,还需要有一定时间段的稳定性测试,往往需要长时间在APP内部进行UI页面的遍历,这类遍历可以有一定的策略,也可能是无序的点击滑动等模拟行为,同时需要监控APP是否有产生crash等情况,行业内部叫做Monkey测试。

以上的测试服务在Android端目前有很多专业的开源工具如:Appium, minicap+minitouch, Macaca,uiautomator等,基于成百上千的Android设备资源池,封装成服务实现租赁任务调度服务或者大规模的设备遍历测试服务。但是,在iOS端,目前要做到多设备并行长时间执行UI遍历测试,或者提供足够低成本良好的真机远程控制服务,还是较为困难,且不说设备量的问题,单是设备长时间连接的稳定性问题就有很多。因此,爱奇艺测试团队为此通过实践,将这类解决方案提供给大家,希望通过交流一起探讨。

解决方案

  • iOS驱动内核及真机资源池搭建

不管是兼容性测试还是稳定性测试服务,首要的就是需要有iPhone真机设备,同时也可以为测试团队对于紧缺设备提供租赁服务。最佳的方法是提供远程租借能力,包括:用户注册登录,使用时长限制,APP安装,远程桌面同步和流畅的UI操作体验。这在Android端有类似的开源项目openSTF,当下是比较流行的,且也被用于大规模设备租赁使用。

驱动内核:在iOS端我们经过各类工具比对和调研,决定选择Facebook开源的iOS自动化框架WebDriverAgent作为iOS的驱动引擎,主要有两个原因选择这个驱动方案:

  • 能够支持一台mac-mini挂载多台iOS设备,成本降低。
  • 由于Appium开源自动化工具底层使用同样的WebDriverAgent或者说xcuitest,可无缝对接,为日后业务线ui自动化测试提供服务。

这里我们也继承了鲁迅的“拿来主义”,针对WebDriverAgent简称:WDA项目代码进行了深入优化,使用了苹果自有API,放弃Facebook封装提供的API,以及一些其他相关优化,具体如下:

a.重写了点击(Tap)、长按(TouchAndHold)、滑动(Drag)等手动操作方法;

b.针对home键的优化,解决反应迟钝问题;

c.对screenshot截图方法,我们也使用苹果自有API: XCUIScreen进行截图,修改截图自适应大小存储逻辑,大幅度提升延迟问题;

d. 解决视频全屏问题,由于视频类APP有全屏播放需求,WDA在全屏播放上存在问题;

e.解决远程桌面操作中由于xcode build导致的断连问题,达到高稳定性的远程控制持续时间。

f . 解决wda心跳检测status请求超过最大连接数问题;

g.解决长时间运行后远程连接UI操作点击滑动等动作失灵情况下的屏幕size缺失问题;

等等。(要是读者有碰头其他情况未解决可公号内留言交流)

优化后效果:

手机ui桌面展示在150ms以内延迟的点击,滑动的响应,使得远程操作手机桌面更流畅。

6bccad4df6a5a1603821806435053fdb.png

驱动能力解决了,接下来就是桌面图像同步,由于这里使用的是截图功能如上c)我们已经优化,同时去掉了一些source tree的内容,将图像呈现的速度控制在150ms的刷新能力。

代码片段如下:

c8556084ffd758dec743bab189950da6.png

为了能让用户可以http访问UI桌面,这里我们使用了wdaproxy开源项目,源码中已经支持了iproxy的Mac和iOS的USB端口映射并与http协议转换绑定能力,使得可以对iPhone手机UI桌面操作。但是对于团队测试使用的时候一般都是安装企业debug的APP,这就需要将指定设备安装功能集成到wdaproxy内提供给用户使用,对于多设备情况下指定APP安装就提出了任务管理尤其对于稳定性测试服务的搭建也是必须的基础能力。

资源池搭建-任务分发和中转服务

目前爱奇艺测试团队是在封闭的设备室内,搭建配置集群节点,考虑到设备耗电和充电情况设置,标配是一台mac-mini对接3台iPhone。

由于Mac-mini端需要通过XCode编译安装有统一开发者证书的WDA APP到手机端,首次搭建均需要人工参与。对于之后手机重启,热插拔的设备状态识别以及WDA异常奔溃,我们都有通过自动化手段去重试,监控和及时报警。保证服务长时间在线,同时便于异常问题追踪和及时修复。

我们看一下,如下图,整体框架:

0b0076df8ff03a36a2b8803270ce61f1.png

任务管理后端,都是按照标准的容器化搭建,通过MQ消息触发的方式到达对应的Mac-mini的worker内,过程中的日志我们基于logstash将数据实时输出到后端日志管理平台,以便后期运维期间问题定位,排查使用。对于Monkey遍历所产生的实时截图我们存储这边统一输出到对象存储系统中,同时对图片设置有时效性。

Worker的mac-mini端集群,承载两块内容:一块是对iPhone插拔状态的及时更新和WDA编译启动后端服务常驻;另一块是对设备挂载和释放时进行端口随机分配和作废,避免释放设备时端口始终被用户占用情况,同时调用中转服务,这里目前有APP安装服务,之后会介绍Monkey任务服务以及通过instruments获取性能日志的服务,后面会讲到。

以下是实际设备资源池租赁的效果图

7c1f66c47ae2fe83872e4ec71de49dab.png
8f731409f705d9f8b07d4942a8a39f14.png

资源池提供的远程控制服务,可以满足业务线在急需设备情况下登录平台可租赁使用,满足日常产品在不同手机的兼容性测试需要,如果大家对上面有疑问也可在公号内留言,我们会关注。

APP稳定性测试

有了iPhone资源池作为底层的稳定基石,上层的Monkey服务就可以搭建起来了。

搭建Monkey服务一定碰到有几个基本问题:

1) APP遍历的策略和覆盖率

2) 崩溃产生后,追查的方式

3) 弹框监听和去弹框能力

上面三个问题是比较棘手的,对于iOS的稳定性测试也是最基本的,当然我们还有一些需要解决的其他问题比如账户登录,iOS稳定性长时间运行后远程控制卡死等这些都是实践中我们也需要解决的。目前就上面主要也是基本问题谈谈:

如下图,是整个稳定性测试框架,和上图的Worker关联起来,与APP安装服务是同等级的。

1419591c28072763adc4d7921a2b1574.png

整个遍历过程通过主线程控制任务时长,透传相关设备列表信息到Monkey子线程中执行ui遍历,在设备或者WDA异常情况时,能及时中断任务和释放设备,抛出异常日志排查定位问题。

遍历主体内部支持Alert弹框的监听,对于“确认”,“同意”,“好”等关键文案锁定点击去除,也包括系统弹框。一些前置场景或账户登录,目前是准备通过平台根据业务线配置步骤下发,后期也会通过OCR或APP类型匹配基于深度学习来进行主动策略性驱动。同时,我们通过图片的相似度来计算图片的去重率,低于一定比例后就进行驱动干预保证遍历的深度和广度,提高测试的覆盖率。

遍历周边服务

UI检测服务:这里截图频率是根据关键Monkey执行步骤为起点每1s一次截图,输出到后端UIChecker服务,主要用来对UI图片上的乱码,错误弹框,黑白屏等深度检测,主动发现问题,UI检测服务基于YOLOv3(You Only Look Once)深度学习模型,该模型网络层数少,只有52个卷积层和1个全连接层,YOLO v3在保持其一贯的检测速度快的特点前提下,性能能上有很大提升,其中Darknet-53采用了ResNet这种跳层连接方式,性能完全比ResNet-152和ResNet-101这两种深层网络好。如下图参考,具体也可官网查询:

6bd858e992f57964741e066d9562aa3f.png

UI检测模型训练了6种UI异常分类,能够在20-50ms内完成对一张手机截图的推理,且在模型推理后期做了适当的优化,可以保证较高的准确率和召回率。如下实际效果图:

cd0951a80966febd284d0e394932fb4a.png

性能日志获取服务:支持被测APP的CPU,内存,流量数据获取(后期加入FPS等常用指标)。 通过启动instruments每秒获取一次CPU和内存数据,每次请求获取一次上下行流量,对于产生的trace文件进行明文解析生成可读文件。性能日志生成后投给后端日志分析平台进行曲线图绘制和其他日志一并存于bug管理平台内。这里由于instruments长时间运行会有数据缺失情况,目前还没很好的解决方案,为保证数据能在时间段内有足够的采样数据,我们会对instruments间断性重启。

崩溃监听分析服务: 我们通过idevicesyslog输出并过滤出APP的相关syslog日志交给后端分析产生URL,并实时通过idevicecrashreport获取crash原始二进制日志,对于crash原始日志还需要用symbolicatecrash结合dsym文件进行分析输出明文。

最后我们将上面所有信息汇总到bug管理平台中自动给业务线对应负责人创建一个bug单,信息包括任务设备,行为轨迹图片,crash的分析日志,APP端日志以及SDK内部日志,后期加入性能日志曲线图等用于排查出现bug时刻的全部参照。

未来规划

寻找Xcode编译过程中由于系统弹框出现导致自动化编译失败问题的解决方案。

通过深度学习平台智能决策APP遍历的深度和广度。

更多精彩内容请关注公众号:爱奇艺技术产品团队

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
USB Network Gate(以前的 USB 以太网连接器)是通过网络(Internet/LAN/WAN)轻松将一个或多个远程 USB 设备连接到计算机的软件,就像设备已插入您自己的计算机一样。 无论您是在其他国家还是在隔壁办公室,都可以使用远程扫描仪,打印机,网络摄像头,调制解调器,USB 加密狗或其他任何东西,就像它们直接连接到您的 PC 一样。 远程 USB 共享工具 Eltima USB Network Gate 中文版远程 USB 共享工具 Eltima USB Network Gate 中文版 USB over Ethernet 免费下载 USB 网关,并在多台计算机之间共享 USB 以太网,以便来自世界各地(或您的办公室)的人可以使用它。 现在,您可以随时随地从家用 PC 或办公室笔记本电脑访问您的打印机,扫描仪,网络摄像头,USB 加密狗或任何其他支持的 USB 设备! USB 网关为您提供了非常理想的功能,可以在 Windows PC 或 Mac OS 上共享 USB 设备,并通过 Linux 设备连接到它。 或相反亦然! 通过 IP/LAN/WAN/VLAN/VPN/Internet 共享 USB 需要在多台计算机之间共享一个或多个 USB 设备? USB 网关(原 USB 以太网连接器)是解决方案!现在,任何用户都可以从办公室中的任何计算机进行打印,扫描或传真。您可以添加密码来控制远程访问设备的用户。 在虚拟机和刀片服务器中插入USB设备 正在寻找将USB设备连接到虚拟机软件或刀片服务器的方法?在客户机操作系统(虚拟机,刀片服务器)上通过网络重定向器安装USB,并立即从远程虚拟桌面访问 USB 外围设备。我们与 VMware,VMware ESX,Citrix XenDesktop 和 Microsoft Hyper-V 兼容! 通过 RDP 访问 USB远程桌面协议) 使用远程桌面连接时可能遇到的常见问题是您无法访问本地 USB 设备。 USB 网络门允许您在远程会话中使用任何本地 USB 设备。此外,您可以将远程计算机设置为立即自动检测并连接到共享 USB 设备,就像您只是将设备物理地插入远程计算机一样。 通过 Wi-Fi 访问 USB 设备 无需更改现有网络配置即可让您的员工共享新的 USB 设备 – 可以通过办公室中的台式机和笔记本电脑进行无线访问。只需在一台 PC 上共享 USB 打印机,扫描仪或其他设备,所有网络用户都可以使用它,就像连接到他们的计算机一样。 每会话 USB 设备隔离 在终端服务器的多用户环境中,很难获得 USB 设备使用的排他性。 USB 网络门允许在其 RDP 会话中为特定用户分配 USB 设备。当时没有其他用户可以访问设备。目前可用于测试模式下的 USB 闪存驱动器和 USB 摄像头。自 7.0 版以来,USB 网关通过 Citrix 支持 ICA 协议。 USB over Ethernet Connector 附加功能 软件提供了许多相应的功能,可以更轻松地增强和共享 USB over Network。 不要将自己限制在一个平台上 USB over Ethernet Connector 为您提供了非常理想的功能,可以在 Windows,macOS 或 Linux 计算机上通过网络共享 USB 设备。更重要的是,您可以创建所需的任何服务器 – 客户端组合,无论是 macOS-Windows 还是 Linux-macOS,任何变体都是可能的! 确保您的数据安全 现代世界中最有价值的资源是信息,我们的 USB 共享软件将确保没有第三方可以访问您的。嵌入式流量加密选项提供高度安全的连接标准。此外,大眼仔旭也告诉您,您可以添加密码来控制远程用户访问。 优化数据流量 通过 USB 转以太网连接器流量压缩选项,您可以大幅提高传输速度和带宽利用率。此选项对于倾向于以未压缩格式传输数据的设备免费有用。 热插拔支持 要共享其他设备,无需重新启动计算机或通过以太网重新启动 USB。只需拔掉当前共享的 USB 设备并插入另一个,就这么简单!由于 USB over IP 连接器通过网络共享 USB 端口而不是单独的设备,因此新设备将自动出现在远程客户端上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值