效能篇 | APP的自动化录制回放系统 全云化处理新体验

1,167 阅读10分钟

在面对大量的APP功能用例回归测试的时候,测试开发工程师最头痛的问题之一便是新功能交付时间紧迫,原有功能回归测试耗时长,自动化脚本都没时间跟进补齐测试用例。导致核心功能回归遗漏,新功能测试质量也得不到保障等问题,爱奇艺技术团队自主开发了一套全新的APP的自动化录制回放系统,并取得了比较满意的实践效果。工欲善其事,必先利其器,我们看看他们是如何做到的。\

简介

测试开发工程师面临高效、高质量等测试的问题,一般会先寻找开源工具,希望能支持对APP端的功能ui自动化进行辅助测试,开源工具如Appium,airtest,以及uiautomator等,这类目前还是属于工具范畴,需要在此基础上做很多工程服务化的搭建,也是将工具的能力拓展到更广的边界。因此,很多公司也根据自身的特点将自动化工具进行二次封装,开发出贴合自身业务的自动化系统。\

为了更好服务爱奇艺的产品测试和开发,提升核心功能回归测试的质量的同时,降低成本提升效能,爱奇艺自主开发全新的自动化录制回放系统,可实现一键式开发环境自动配置、测试开发日常处理功能自动化的能力、快速写脚本的能力,更提供基于云端设备全部云化处理、告别线下开发自己搭建环境。

录制回放架构设计

资源管理应用层

主要包含的应用APP管理,脚本管理,集合管理(便于理解这里叫做场景管理),任务分发管理,测试结果管理。主要执行步骤经历,如下5个阶段:

1)APP管理: APP线下测试的版本比较多。比如:同一包名的APP交付测试就会编译打包多个小版本的测试包:有视频专项测试的版本、有性能专项测试的版本等。如何管理针对不同类型的包进行有效的自动化UI测试,就需要对APP进行管理,同时与脚本集合进行关联,就显得很重要。

2)脚本管理: 用户通过录制工具生成的代码文件,我们提供生成python代码方式的录制工具(详细见下文),录制完成保存到到业务对应在线模块,为后续场景的创建提供了脚本资源基础。

3)场景管理(集合管理): 用户将多个录制生成的脚本文件,进行筛选组合生成一个测试集,用于对指定场景进行测试,系统对场景内脚本支持循环次数,顺序调整,后续还会加入公共变量数据可视化管理,实现脚本间数据可共享能力。

4)任务分发管理:场景设置完成后,我们就可以实现任务配置,进而触发对应的场景任务了,如果你看过这篇文章《效能篇 | 爱奇艺APP一键体检技术实践》,那就很容易理解,在任务配置情况下,根据不同业务类型针对自动化服务的对象需要,可以分:用例功能回归测试,一键体检。后续,还会新增Pingback自动化、定向Monkey等类型。当场景集合脚本被选择后,提交到服务端,触发消息任务,手机云端资源池收到消息后,针对设备进行自动化任务分发,整个过程主要包含了如下内容

· 从对象存储服务上进行脚本文件下载:文件因为统一在对象存储服务器中,任务触发后,脚本就会在手机资源池的终端指定目录内下载。

· 多设备租赁请求,获取设备ID:系统由于与设备资源池完全打通,通过云端真机的租赁接口可以容易获取实验室资源池的设备信息。

· 任务分发指定设备:手机资源池的物理机器内,部署有docker环境,能实现容器自动申请,这里因为考虑到UI自动化的稳定性,所以把容器内外的设备实现共享,整体对设备的连接始终保持USB直连方式,这样任务被触发到对应的容器挂载的手机设备上运行。

5)测试结果管理:

任务分发到不同设备回放后,本次任务的质量过程情况,会依次根据设备列出运行详细结果,包括提供行为轨迹、性能趋势、日志数据等内容。

 

脚本录制工具

脚本录制工具主要基于爱奇艺手机云资源池,一站式web化,从设备租赁,远程UI操作,脚本自动生成到单机脚本调试。用户无需为配置环境,寻找设备,花费太多时间。大家请看如下效果图:\

说明:脚本录制工具的Web化IDE支持用户在线编程,相比于大多数公司的移动云UI自动化,使用web定制的固定组件配置方式有所区别,考虑到一些细节,比如:进行逻辑判断处理和循环嵌套处理等场景下时,需要多次编辑,多层嵌套配置,来实现。简单的事情变得复杂,同时体验上也显得交互很多。

我们借鉴了某客户端录制IDE工具的思想,将脚本的生成依托在了云端IDE,同时提供用户对APP元素识别inspector能力,使得在线编程变得方便、灵活:

一、脚本录制工具内部工作原理

脚手录制工具分为三个部分:前端文本生成器,虚拟终端,手机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自动化校验以及端监控等,可以发挥出巨大威力。\

对于脚本录制工具的画面呈现,第一阶段我们还是采用的是minicap截图方式,后续会通过云端arm服务器实现模拟器操作画面的推流交互,达到更低的延迟和流畅的操作体验。

在工程效率建设方面,我们也希望可以接入CI/CD,使其成为很好的一种插件,辅助产品迭代,能够将测试能力提前,实现真正意义上的测试左移,从而达到降本增效的作用。

也许你还想看

效能篇 | 爱奇艺APP一键体检技术实践

爱奇艺云剪辑Web端的技术实现