效能篇 | APP的自动化录制回放系统 全云化处理新体验
简介
为了更好服务爱奇艺的产品测试和开发,提升核心功能回归测试的质量的同时,降低成本提升效能,爱奇艺自主开发全新的自动化录制回放系统,可实现一键式开发环境自动配置、测试开发日常处理功能自动化的能力、快速写脚本的能力,更提供基于云端设备全部云化处理、告别线下开发自己搭建环境。
录制回放架构设计
资源管理应用层
1)APP管理:APP线下测试的版本比较多。比如:同一包名的APP交付测试就会编译打包多个小版本的测试包:有视频专项测试的版本、有性能专项测试的版本等。如何管理针对不同类型的包进行有效的自动化UI测试,就需要对APP进行管理,同时与脚本集合进行关联,就显得很重要。
2)脚本管理:用户通过录制工具生成的代码文件,我们提供生成python代码方式的录制工具(详细见下文),录制完成保存到到业务对应在线模块,为后续场景的创建提供了脚本资源基础。
3)场景管理(集合管理):用户将多个录制生成的脚本文件,进行筛选组合生成一个测试集,用于对指定场景进行测试,系统对场景内脚本支持循环次数,顺序调整,后续还会加入公共变量数据可视化管理,实现脚本间数据可共享能力。
4)任务分发管理:场景设置完成后,我们就可以实现任务配置,进而触发对应的场景任务了,如果你看过这篇文章《效能篇 | 爱奇艺APP一键体检技术实践》,那就很容易理解,在任务配置情况下,根据不同业务类型针对自动化服务的对象需要,可以分:用例功能回归测试,一键体检。后续,还会新增Pingback自动化、定向Monkey等类型。当场景集合脚本被选择后,提交到服务端,触发消息任务,手机云端资源池收到消息后,针对设备进行自动化任务分发,整个过程主要包含了如下内容
· 从对象存储服务上进行脚本文件下载:文件因为统一在对象存储服务器中,任务触发后,脚本就会在手机资源池的终端指定目录内下载。
· 多设备租赁请求,获取设备ID:系统由于与设备资源池完全打通,通过云端真机的租赁接口可以容易获取实验室资源池的设备信息。
· 任务分发指定设备:手机资源池的物理机器内,部署有docker环境,能实现容器自动申请,这里因为考虑到UI自动化的稳定性,所以把容器内外的设备实现共享,整体对设备的连接始终保持USB直连方式,这样任务被触发到对应的容器挂载的手机设备上运行。
5)测试结果管理:
任务分发到不同设备回放后,本次任务的质量过程情况,会依次根据设备列出运行详细结果,包括提供行为轨迹、性能趋势、日志数据等内容。
脚本录制工具
脚本录制工具主要基于爱奇艺手机云资源池,一站式web化,从设备租赁,远程UI操作,脚本自动生成到单机脚本调试。用户无需为配置环境,寻找设备,花费太多时间。大家请看如下效果图:
一、脚本录制工具内部工作原理
脚手录制工具分为三个部分:前端文本生成器,虚拟终端,手机APP客户端组成。
1)前端文本生成器:用于在该IDE内对APP操作后自动生成python代码。支持代码编辑、多Tab代码查看以及一些组件调用和元素查看生成对应组件功能代码。
2)虚拟终端:用于对文本生成器回放调试时候接收python文本内容。当调试回放的时候,服务端收到由用户发起的连接请求后,在后端创建一个ptmx(pseudo-terminal master)终端会话,启动python解释器,创建长连接,保持等待接收生成器发送的脚本信息。
3)手机APP客户端:手机端安装有iqiyi_uiautomator接收虚拟终端指令,转换成对应的用户模拟操作行为。
二、脚本录制工具特殊组件
1)手机桌面视频录制组件:该组件用于录制MP4视频文件。由于业务方对APP的启动耗时有测试需求,通过对手机桌面录制的MP4视频,发送到视频分析后端,统计出APP打开的耗时时间。
主要优点:基于录屏代码自动生成的方式,代码灵活性高,可在需要的功能点进行度量,比如视频启播耗时。通过这种方式将很大程度上减少了用户对各类视频录制问题、存储问题、分析问题,以及结果数据存储问题。这类也是单一工具无法做到。
主要场景:本品VS竞品耗时对比分析,较传统打点方式,更通用,方法也统一。
2)在线OCR元素识别:对于特殊的图片内含有文本信息的元素,如果无特殊属性进行唯一性定位的话,在线OCR元素识别将是一个非常不错的组件,同时也可以提供代码生成能力。至于OCR识别服务准确率情况,根据各个公司的基础架构服务而定,目前我们是基于爱奇艺内部服务实现,可以获取设备当前画面中匹配的文字信息坐标。
OCR文字识别能力并不是很特别的组件,我们主要将OCR识别后的内容结构化并以组件方式供用户选择,并可视化进行挑选,比如上图大家看到的,对于识别“爱奇艺”中文三个字符时候会有很多选项,而我们要选择的其实是“爱奇艺-大主宰独播官方”的时候,可视化便能方便定位唯一性元素了。
3)在线图片匹配:简单的说就是能在大图中找小图,使用sift离散特征点匹配,对图片进行降噪处理模糊匹配图片,匹配成功后直接在图片位置进行点击操作。另外还有一个亮点就是在线截图存储能力,实现截图代码生成能力。
主要优点:特殊情况下元素属性无法唯一标识情况下可采用,在线截图的一个方便处,在于被截图全部云端存储和管理,避免用户在本地截图后保存,还需后期维护管理,显然成本较高。我们采用这类云端操作方式,图片切图由用户自行命名,用户一旦代码提交保存后,其他脚本也可以直接调用,在批量回放的时候根据命名、用户以及时间戳关联,直接检索出切图的图片信息,再与设备实时画面进行匹配,进而可以回放自如。
4) 弹框注销组件:自动消除APP启动弹框和运行过程弹框。APP启动或者运行过程会有系统授权弹框或者一些APP内业务应用弹框等,我们加入了hide_toast命令,目前是使用OCR接口查找一些常用关键字,对一些常见的弹窗中出现【确认,允许……】自动进行点击。APP运行过程中我们加入了iqy.myWatcher()监听整个APP执行期间的弹框情况,如果有匹配的关键字,会自动将其点击。
5)APP管理安装工具:支持手工安装和自动安装两种方式。开始录制脚本的时候,首先是需要手机内安装APP才可以进行脚本录制,为了节省用户时间,我们对接了内部的APP打包管理系统,用户可以根据业务线查出所需要的测试安装包以及对应版本号,同时也有包含了线上渠道历史包。
后续规划
APP的UI功能自动化,除了能支撑业务的功能回归测试和验证外,后续也会在定向遍历执行相关自动化工作上,提供很多的帮助,比如定向Monkey,pingback自动化校验以及端监控等,可以发挥出巨大威力。
也许你还想看
效能篇 | 爱奇艺APP一键体检技术实践
爱奇艺云剪辑Web端的技术实现
扫一扫下方二维码,更多精彩内容陪伴你!