录制快、回放稳,爱奇艺 iOS 云录制回放平台技术实践
众所周知,移动 APP 的周期短、迭代速度快,测试人员在保证新功能正常运行的情况下需要回归大量的历史功能,自动化回归便成为重要的回归手段之一。iOS 端自动化由于以下问题,一直很难在业务线广泛开展。
落地成本高:执行环境必须使用 mac 设备,硬件成本高,本地服务 &设备难以跨团队共享。
学习成本大:除了 Python、node 等基础编程环境外,还需要使用 xcode,要有一定的 OC 基础。
二次开发难:设备驱动如 Appium WDA、Facebook-WDA,部分功能接口响应耗时长、稳定性不高,且基于 OC 语言编写,二次开发难度较大,难以针对业务特性定制。
基于上述情况,爱奇艺在云真机基础之上重点优化设备驱动,并将设备共享、远程租用、自动化脚本管理、任务调度、可视化报告等能力组合,推出了爱奇艺 iOS 云录制回放平台。该平台通过设备和服务共享可以有效降低业务线自动化投入,使测试人员更加专注于测试用例设计。通过项目实践和不断调优,平台在易用性和自动化执行效率等方面有显著提升,现已对接主站等多条业务线,覆盖视频播放、视频编辑、feed 流等复杂场景,成为爱奇艺业务群质量保障中不可缺少的一环。本文将介绍爱奇艺 iOS 云录制回放平台的系统架构以及实现细节。
一、方案设计
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 云平台回放调度服务从设备筛选、任务触发、任务执行和问题回溯等四个方面着力打造满足业务线需求的平台。
系统设计图
设备筛选
手机设备作为自动化任务执行的最终载体,是自动化任务启动的第一步,其丰富程度和筛选的灵活性决定服务的应用范围。平台支持用户从机型、分辨率、系统、运营商等多个维度进行选择。为避免手机本身异常影响自动化任务执行,在自动化任务开始之前系统会进行设备环境检查,只将任务分配到检查通过的手机设备上执行。
任务触发
任务触发无缝对接 CICD,支持定时/手动/指定条件触发,增加用例集概念,支持以业务线/用户个人维度对执行脚本进行管理,并指定用例并行或串行执行。例如,需要验证兼容性可以选择相同用例多设备并发执行,在用例较多时可选择多设备分布式执行以提升执行效率。
任务执行
自动化执行过程中,我们重点处理以下几类情况,以保证自动化任务稳定运行:
(1)实时监控并处理系统弹窗和 App 内各种弹窗等等,以保证任务执行过程不被弹窗干扰,弹窗处理有效率>90%。
(2)测试关键过程信息随时存取,同时启动崩溃检测,与 bug 项目协同管理,发现异常自动转为可视化 bug。
(3)任务结束时自动进行清理环境,包括卸载 App、清除本地执行过程数据等,支持异常任务支持选择相同条件设备进行重试。
问题定位
对 App 异常情况提供足够的信息辅助开发修复问题形成闭环才是自动化最终的目的,可视化报告必不可少,它可以帮助用户快速了解整个任务的执行情况、定位异常。
爱奇艺 iOS 云录制回放提供的测试报告包含任务概况、设备信息、用例执行步骤、执行日志等内容,让我们对每个用例的执行过程都了如指掌,快速还原崩溃前后场景。
基于云端设备管理模式,可以快速跳转到对应设备进行场景回放和远程调试。
任务报告图
二、落地效果
录制回放系统极大地降低了 iOS 自动化的编写和运行成本,目前已应用于爱奇艺内部的多条业务线中,日均执行次数 100+,发现多例功能性 bug 和崩溃。在日常的版本准入、回归和 CICD 流程中发挥着重要的作用。
平台提供的各类元素识别方法在不同系统手机上兼容性良好,平均执行成功率稳定在 98%以上,常规版本迭代中脚本维护的成本低,单次维护半小时以内。
三、未来展望
当前自动化测试用例仍然需要测试同学进行多次调优才能达到最佳的执行效果,智能化测试用例生成是一个重要的探索方向,未来我们会不断地丰富元素的识别手段和生成方式,使用例生成更加智能、App 自动化运行更稳定。
在问题定位方面,第一阶段还是以提供执行场景信息、人工定位和判断为主,后续我们会持续跟进各类问题产生原因并生成知识库,结合知识库实现失败场景的初步定位和问题智能分发,进一步降低自动化跟进和维护成本。
录制回放作为自动化的基础平台,除支持基本的功能验证和 UI 验证外,未来会与爱奇艺内部各平台打通,支持同步启动流量录制、PingBack 检测、数据 Mock 等,助力各种专项测试。
评论