录制快、回放稳,爱奇艺iOS云录制回放平台技术实践
众所周知,移动APP的周期短、迭代速度快,测试人员在保证新功能正常运行的情况下需要回归大量的历史功能,自动化回归便成为重要的回归手段之一。iOS端自动化由于以下问题,一直很难在业务线广泛开展。
落地成本高:执行环境必须使用mac设备,硬件成本高,本地服务&设备难以跨团队共享。 学习成本大:除了Python、node等基础编程环境外,还需要使用xcode,要有一定的OC基础。 二次开发难:设备驱动如Appium WDA、Facebook-WDA,部分功能接口响应耗时长、稳定性不高,且基于OC语言编写,二次开发难度较大,难以针对业务特性定制。
01
方案设计
1.1 基本流程
录制回放基本流程图
在录制过程中,云IDE实时监听鼠标点击、滑动事件,同时获取手机页面的DOM树,根据用户操作的坐标查找最匹配的元素节点,如果用户选择OCR和AI方式,则识别手机截图中的文本和已知的AI元素,确认元素之后会转换为自动化脚本并保存。
在回放时,首先拉取待执行脚本集合,进行脚本解析,通过脚本指定的方法查找元素并执行相应的操作,如点击、滑动等。任务结束后会生成测试报告,包括用例执行步骤、日志、截图等信息。
1.2 录制篇
功能多样
录制页面采用Web化IDE设计,集成了设备选择、脚本管理、实时画面和脚本实时生成四大功能,支持脚本在线编辑和调试,并持久化到服务端,相对于其他竞品的录制页面,更方便、灵活。
设备列表:展示可用的手机列表,支持设备实时切换;
脚本管理:对录制的脚本进行管理,可以按照业务、用例集等不同维度归档;
脚本编辑:在该IDE内操作APP会自动生成Python脚本,支持在线编辑和多机调试;
手机画面:实时展示手机画面,同步监听用户操作事件,展示画面元素操作选择。
录制页面
流畅的操作体验
除了功能多样外,流畅的操作体验也是好产品的重要评价指标之一,其性能直接影响平台用户体验和操作效率。我们调研了市面上主流的WDA,如Appium WDA、Facebook WDA等,他们的设计主要是用于自动化执行,设计思路优先保证case执行的稳定性,因此相关接口响应耗时比较长,这样的设计严重影响用户操作体验并不适合作为录制使用,考虑到开源的WDA都是用OC语言编写,学习成本比较高,我们决定使用SWIFT语言自行开发WDA,重点在DOM树获取速度、点击响应耗时和画面帧率方面进行优化。
在DOM树获取方面,区分层级页面的元素结构并加以剔除,有效降低元素查找速度。
针对点击响应慢的问题,我们优化原有接口调用逻辑,包括去除复杂的同步等待机制等,响应速度有了很大提升。
在屏幕获取方面则是通过WDA实现截图,重点优化图片压缩算法和传输效率,保证画面清晰度的同时达到每秒20帧以上的画面渲染效果,有效解决画面卡顿的问题。
优化前后数据对比如下:
远程录制画面渲染的效果图如下:
远程录制画面渲染效果图
丰富的元素识别方式
元素识别方式分类
原生方式
iOS的原生支持方式,包括predicate、accessibility ID、坐标等方式,利用元素的type、name、label等属性定位,其中predicate支持比较、范围运算符等,这种方式适用于元素定义比较规范的场景。
XPath方式
路径定位方式,iOS原生系统并不支持此种方式,业界开源的工具定位速度很慢,通常在3-30秒,我们通过路径优化获取算法,XPath获取速度降低到1秒以内并且提高了多机回放的兼容性,优化前后数据对比如下:
图像识别
依托于爱奇艺自研的AI和机器学习技术,支持对UI界面截图进行OCR识别和图标识别,使得Android端和iOS端使用同一套UI自动化测试脚本成为可能,实现跨平台脚本能力,目前这种方式多用于图标和icon的识别场景。
1.3 回放篇
稳定的脚本加上完善的任务调度服务才能实现自动化任务的高效运转。iOS云平台回放调度服务从设备筛选、任务触发、任务执行和问题回溯等四个方面着力打造满足业务线需求的平台。
系统设计图
设备筛选
任务触发
任务执行
问题定位
任务报告图
02
落地效果
03