自动化测试框架 Totoro 是由蚂蚁金服终端工程技术部实验平台技术组自主研发的一套自动化测试框架,支持 Android、iOS、HTML五、小程序、Weex、Cube 等移动端自动化测试场景。算法
为了确保蚂蚁金服移动测试平台在集群环境下可以稳定、高效运行自动化任务,并灵活快速支持多场景域内业务,Totoro 经历了从 0 到 1,从 1 到 2,并逐步演进到目前支撑阿里域内 10+ BU 平常自动化测试及结合移动开发平台 mPaaS 对外输出,成为集团内使用面最广、性能最为稳定的自动化测试框架之一。小程序
本文将围绕 Totoro 一路踩坑、迭代完善成熟的过程,从沉淀总结的一些方法论和解决方案展开分享:安全
蚂蚁金服移动测试平台最开始引用了 Appium 开源解决方案,但因为其部署复杂、接口不稳定、设备掉线、多层服务链路、社区维护不够迅速等种种问题,综合评估业内相似框架都有共性的痛点,所以咱们决定从新设计一套适合云测集群环境、知足域内不一样业务需求快速迭代更新的解决方案。性能优化
基于已有的痛点,咱们认为 Totoro 从设计上须要知足“调用链路尽量短”、“项目结构尽量简单透明”等特色,从而确保测试链路上的不稳定因素尽量少。同时,综合考虑异常状况下,咱们须要可以快速定位问题,并具有必定的自修复能力。结合业内多个框架广泛采用三层或多层的设计,Totoro 最终被设计成了 C/S 模型的两层架构。网络
两层架构的设计理念实际上为 Totoro 带来不少优势,好比:架构
面对蚂蚁云测集群自动化严格的要求,稳定性的问题依然浮出水面,成为 Totoro 不得不解决的一道难题。并发
在自动化任务的任何链路节点都有可能发生异常,因此稳定性实际上覆盖多个层面,好比:框架
接下来咱们从以上 5 个方面阐述在整个调用链路上咱们都作了那些努力。机器学习
Totoro 框架在前期开发中,平常维护须要投入极大精力,每日要面临框架自身缺陷引发的异常和各类业务自身的异常问题。同时,各种异常问题要求人工筛选,从而推进框架自身及业务方去解决。由此带来的结果是,大部分云测任务由于这类代码问题而引发终止,致使测试开发不够稳定。ide
为了改善任务异常带来的不稳定因素,杜绝框架自身 SDK 问题,而且业务异常可以作到智能分类,咱们首先作了一次全类型异常堆栈的上报统计。根据后台统计数据能够大概分为“业务层逻辑异常”和“SDK 层异常”,针对发现问题,咱们集中投入专项研发精力,修复框架逻辑不合理引发的异常,杜绝 SDK 自身问题;针对海量业务异常,咱们作了一层抽象归类,将业务异常逻辑归类为明文提示并给予必定推进建议,而且添加检测点状态校验;针对某些偶现异常,重脚步层作一次重试提示用例结果成功率。
在程序异常治理过程当中,咱们发现业务用例大多都须要在程序各个运行阶段封装一些业务逻辑,然而 SDK 层也会有必定的初始化过程,经过 JUnit run 起来的用例一旦业务封装或SDK层接口调用实际不对,就有可能引发程序不稳定现象。所以,Totoro 框架更加现有的业务需求现状,及平常已发现的问题,自身定制了一套规范的 Totoro 用例生命周期,业务用例能够在钩子方法中封装各个节点的逻辑。
Totoro 框架在手机中的核心服务(TotoroUiautomator/TotoroWDA)在用例执行过程当中,会发现连接失败、服务不可用等状况,这种不稳定因素更可能是系统限制形成的,能作的就是在恰当时候重启服务,保障整个自动化流程正常进行。
手机掉线问题是自动化任务流程中必须面对的问题,Totoro 联合蚂蚁云测平台采用了一套软硬件全链路的设备在线保障服务。
Ⅰ. 软件链路上的掉线恢复能力
软件链路上的能力是指集成在 Totoro Client 端的一套设备恢复方案,嵌入在底层通讯接口处,一旦发现设备掉线,能够经过远程网络服务,发送消息到手机中的核心服务,经过设备 owner 权限重启手机 ADB,若是依旧失败将进行 PC 端链路的 usbreset。
正常状况下,三次重启内手机 ADB 几乎都能恢复。个别状况恢复失败的,会有现场详细信息上报,且会触发 changedevices 策略更换手机从新执行测试任务,保障流程正常。若是根据历史上报数据统计,分析老旧设备处于常常掉线的不稳定状态,会采起降级措施,调换到对连接要求低的设备池中(如 monkey 池)或下线操做。
Ⅱ. 硬件链路上的设备连接护航能力
在硬件链路的稳定性构建中,大多云测平台选择购买质量较好的 USB Hub。然而蚂蚁云测平台目前要面临每日 7k+ 级别的自动化任务和 mPaaS 金融云级别的用例稳定性挑战,通过实验,市面上再好的设备也没法达到的全部工程须要的质量标准,而且缺乏智能控制模块。所以蚂蚁终端工程技术部实验平台组自研了一套 SmartHub,具有独立稳定的供电模块,每一个端口可远程程序自动控制(电压/电源/重置等)。目前为止 SmartHub 已经全面量产并投入使用,效果图以下:
设置网络服务的稳定提供,咱们主要作了如下几方面尝试:
在真实的用例构建环境中,须要有不少细节策略点保障整个服务的稳定运行,这里主要罗列几条主要的方案:
蚂蚁云测自动化执行集群环境中,应用全自动智能安装是最多见场景之一,然而 Android ROM 的碎片化和各个厂商的定制化,致使在安装过程当中须要适配各类各样的弹窗;甚至部分厂商须要登陆态且要求输入帐号密码,致使在数以千计的机型集群环境中全自动智能安装应用成了一个挑战。以下图部分安装弹窗场景:
Totoro 框架的自动化服务能力是基于 Uiautomator2 深度定制的,所以整个服务会以 APK 形式安装在手机端。要作到一套完整的全自动安装方案,就必须抛弃在 Totoro 服务 APK 里实现。 最终,咱们采用了能够独立在手机中免安装直接运行的 Uiautomator1 方案进行实现,做为独立的安装弹窗处理专项进行迭代更新。
针对国内机型及云测机房全线机型,安装弹窗专项项目,前期以全覆盖的方式抽象弹窗点击规律,dump 页面控件信息,查找关键字,作了机型纬度的适配,而且在每一个任务有安全失败报警机制,研发人员可以快速兼容问题机型,及 UI 变动。
最终实现了一套能够处理大部分 ROM 安装弹窗场景的持续迭代的智能安装弹窗处理方案。
因为整个弹窗处理依赖与 dump 控件信息逻辑,某些厂商(华为、vivo、oppo 等)为了防止黑产及其余安全考量,部分安装链路上的弹窗页面会禁止 dump 功能,致使咱们获取不到页面信息,而没法判断应该点击的页面坐标信息。
针对该场景,咱们对机房的手机作了大量的安装调研,发现弹窗的 button 出现的位置区域和意义是有必定规律的,有些须要服务重启才能 dump 控件信息,有些是按照版本及机型呈现规律的 UI 样式,有些须要特殊的手机 Action 才能获取相应事件。咱们将这些规律进一步抽象分类,作了一套智能盲点逻辑,针对没法 dump 到的场景具有拓展兼容的能力。
智能盲点在个别规律没有考虑周全的场景下仍然会出现失败的状况,那么,如何构建一套自适应的能力呢? 所以,咱们在思考是否能够结合 AI 能力来智能分析页面信息,由算法结果提供具体的点击路径方案,从而快速兼容遗留场景。 目前结合 OCR 服务,Totoro 具有智能分析界面信息,精准获取点击目标坐标,完成弹窗处理的能力。后续将结合深度算法实践,采用安装场景模型数据,让算法直接给出操做建议,完成整个场景的自适应兼容方法。
目前自动化安装组件通过多纬度的场景兼容,已具有必定自适应能力,可以完成平常自动化安装任务,目前已处于极低成本的维护状态。除了应用在平常自动化任务中,该功能也嵌入了云测平台的远程租用功能,如下是安装效果:
移动自动化测试过程当中的各类手机弹窗是影响用例稳定性执行的重要因素之一,面对各类类型及场景的弹窗,Totoro 框架中自研了一套全场景的弹窗治理方案:
异常弹窗的处理中,安卓框架中给出了UiDevice.registerWatcher
接口方案。可是咱们实际使用中发现,这个接口回调不是稳定的,更加官方解释,当自动化过程当中查找一个控件失败时候才会触发回调。
/** * Registers a {@link UiWatcher} to run automatically when the testing framework is unable to * find a match using a {@link UiSelector}. See {@link #runWatchers()} * * @since API Level 16 */
复制代码
为了可以构建多场景的监听机制,必需要有一套页面监听的稳定回调接口。通过翻看UiWatcher相关源码发现,能够经过 hook,主动触发runWatchers()
。而咱们须要作的,还须要在页面弹窗变化时,稳定触发该接口。
安卓 Accessibility 服务能够经过注册,监听弹窗或者页面甚至一个细微的控件变化,为了性能均衡,只需注册弹窗变化回调事件便可。这样一套稳定的弹窗监听回调机制就构建好了。
有了保障registerWatcher接口的回调稳定性的机制,那个咱们就能够依赖这个接口去监听页面UI的变化,作到稳定处理页面弹窗。结合业务需求及平常用例场景,Totoro 框架中能够针对如下纬度来监听页面变化,作到几乎全场景的弹窗治理。
而后面对没法 dump 到控件信息的非 Native 页面(H5 /小程序),就须要结合机器学习的方式,采用算法能力去分析页面 UI 结构,去处理页面中可能的异常弹窗。
Totoro 算法同窗自研了一套控件 dump 算法能力,脱离平台及页面渲染方式,能够将 App 截图经过算法生产页面原始控件图,知足非 native 场景的弹窗处理。
目前机器学习的分析能力仍然在快速迭代中,除了应用在弹窗页面分析处理外,还应用在页面异常类型检测(包括加载失败、控件截断黑白屏等),已成功落地小程序平常准入和支付宝钱包平常兼容性等重要业务线中,后续会推广到更多的业务中去,让 AI 赋能不是一句空话。
Totoro 自动化测试框架从立项到如今已经走过近三个年头,目前仍然处于快速迭代时期。最近一年,项目自身稳定性质量有了质的提高,在与蚂蚁云测平台共同努力下,愈来愈多的域内 BU 选择蚂蚁云测和 Totoro 做为移动自动化云测方案。
为更好的支撑域内及 mPaaS 移动自动化测试测试技术,高效输出 Totoro 实验 SDK ,咱们还有不少事情能够完善。 将来,咱们将从如下几个场景发力,朝着规范化、可扩展、多语言平台、插件化方向继续努力发展。
当即报名:t.cn/Aijh6opW
《蚂蚁金服 mPaaS 服务端核心组件:亿级并发下的移动端到端网络接入架构解析》
《mPaaS 核心组件:支付宝如何为移动端产品构建舆情分析体系?》
钉钉群:经过钉钉搜索群号“23124039”
期待你的加入~