1、百度小程序自动化测试技术的应用和实践 业务背景介绍 整体架构设计 小程序测试引擎 真机录制回放 云真机测试服务 生态质量管控体系 展望&总结目录百度小程序自动化测试技术 - 背景2018 年业界各类开放生态测试技术状况2018 年开源开放的百度小程序生态体系带来的业务挑战:开发生态Android测试引擎n 百度小程序需支持运行在 30+ 联盟伙伴的 APP 上n 核心框架需进行每周多次的迅速迭代,以追齐竞品体验n 2019 年底入驻小程序数量预计破 30w,线上生态压力巨大Uiautomator2、Appium、 MTC、Wetest、InstrumentationCTSAirtestAirt
2、est、TestinUIAutomation/UITest、 MTC、Wetest、iOSWebUI AccessibilityWebDriver-Appium、AirtestSeleniumAirtest、TestinAirtest、Testinminiprogram-automator微信小程序云测试微信小程序FAutoTest对生态质量保障带来的挑战:如何在有限的资源预算条件下,支付宝小程序云测试支付宝小程序百度小程序-SoloPi无-有效保障开源开放的小程序生态的整体质量?无无无迫在眉睫打造高效稳定的百度小程序自动化测试技术体系,来支撑各项业务挑战,保障生态健康发展百度小程序自动化测试
3、技术 整体架构设计业务挑战联盟 APP 准入开发者质效赋能支撑业务线上小程序质量保障支撑业务支撑业务CTS支撑业务真机巡检真机录制回放(LazyUITest)定制方案云化服务云测试机器审核云真机集群测试服务百度小程序自动化测试引擎(betterAutoTest)奠基能力小程序自动化测试技术体系架构图架构设计的基本思路n 奠基:首先,研发自动化测试引擎,让百度小程序拥有能被自动化操控的能力n 云化:接着,建设专用型云端真机集群测试服务,开放统一 API 提供能力n 定制:最后,基于统一服务,针对 4 项业务挑战,制定对应性解决方案百度小程序自动化测试引擎 调研&难点分析百度小程序内部机理【可用&
4、有效性分析】测试引擎需支持 30+ 联盟 APP 运行n 行业:Testin 或者腾讯的 FAutoTest 都采用了 基于 ChromeDebugging Protocol 封装 作为解决方案n 百度小程序基于 Android/iOS 的 WebView 而建n 由 APP 集成的 swan-sdk 及分版本动态下发的 swanjs 组成 nn 采用一主多从的多进程架构问题:我们无法要求联盟伙伴在 APP 中开启 chrome debuggingprotocol,因此无法采用类似方案及 Appium、Macaca 等工具【兼容&稳定性分析】测试引擎需多真机、多 APP 兼容性测试业界相关测试
5、工具调研n 行业:在原生操控能力限制的情况下,会采用 Airtest、SoloPi 等 基于图像识别 的解决方案n 问题:图像类解决方案存在多机兼容性差,执行效率低等问题测试工具来源Appium社区Airtest网易Macaca阿里FAutoTest腾讯微信小程序&WebView(仅支持微信)iOS/Android/We iOS/Android/H5/ iOS/Android/We支持的端bView/H5小程序/WebViewbView/H5【易维护&可持续性分析】小程序应作为被测试的最小主体支持webview的前提n 行业:以 页面维度组织和编写用例n 问题:页面维度的用例组织和编写,不易支
6、撑跨小程序等测试场景,相对百度小程序一主多从的架构模式,恍如噩梦APP 需开启 cdp无APP 需开启 cdpAPP 为微信用例编写部署容易用例兼容脚本一般兼容脚本+录制容易脚本/录制一般脚本一般兼容不兼容兼容百度小程序自动化测试引擎 方案&架构图WebSocketn 提供标准化 API 支持基于Bat DriverClientNode.js 的用例脚本编写双向通信解决方案Bat Agentn 集成 ADB、WDA 等端控能力,统一通信,以小程序维度组织指令运行WebSocketServern 采用 selenium 1.0 扩展加载思路透出自动化能力ADB小程序管理batprotocolWD
7、A设备管理双向通信n 采用三层双向通信架构,支持双端能力、录制回放等复杂场景Bat Enginen 经由扩展加载,将渲染页WebSocketClientEngineMaster.jsEngineSlave.js各页面操作面操作能力经主控进程以双向通信方式透出唯一代理小程序扩展加载小程序运行时百度小程序自动化测试引擎betterAutoTestn 通过 debug 小程序提供调试模式开启开关n 开关开启,弹框要求授权,并以 extension 方式加载 bat-enginemaster控制所有页面逻辑slavslavslave对应每一个渲染页面联盟宿主 APP百度小程序自动化测试引擎 效果&问题
8、问题效果以脚本方式编写 UI 类测试用例的一个通病是:编写耗时太长 支持 4 端 12 个联盟宿主 APP,用例一处编写到处运行 自动化测试能力覆盖度达 70%,单指令耗时 100ms 经 200w 次云端任务执行统计,稳定性 99.9%(单步骤编写平均需 40s 上下)问题 4 步即可完成环境准备工作,支持多真机多小程序同步操控产品迭代,UI 随之频繁变更,Tips以脚本方式做 UI 自动化测试,一直以来都是一个噩梦n UI 类自动化测试的核心有三点:稳定性、兼容性、易用性n 测试引擎解决了稳定性、兼容性问题,但没有解决易用性问题解法基于真机操作的测试用例自动录制&多机回放真机录制回放 调研
9、&选型录制回放实现的常用手段录制回放的产品形式【基于原生系统工具】n 纯 IDE 录制回放:基于模拟器或高速截屏以支持在 PC 端 IDE进行用例的录制回放。案例:Airtestn 比如 Android 端可基于 AccessbilityService 获取控件树及用户操作事件等,经转换可获取对应控件信息n 而 H5 在 APP 支持 cdp 情况下,可通过代码注入辅助录制优势:稳定,准确劣势:原生系统若无有效工具可用,便无法采用此手段【基于图像识别】n 纯真机录制回放:通过在真机安装特制的 APP,监听用户事n 通过模式或者特征匹配算法,进行用例录制回放件,捕获控件信息,以支持纯真机的录制回
10、放。案例:SoloPi优势:非侵入式,适应性强劣势:受限图像识别技术在多分辨率屏下的准确度,Feed/图片等内容多变,稳定/兼容性不大好真机录制回放 方案【产品形式】采用 PC 端 IDE + 真机录制形式n 采用 IDE 方式,用例更便于维护&调试n 采用真机录制方式,录制过程更加流畅迅速(问题:需在 PC、真机间切换操作,体验略显不佳)录制回放 IDE用例编辑器用例管理设备管理调试&回放 数据 Mock云端交互设备感知多机群控用例解析单步调试/回放数据拦截用例云传云端回放事件捕获用例录制JSON 格式统一转储存储&MockBat DriverBat Agent【录制手段】原生工具 + 图像
11、识别n betterAutoTest 引擎原生支持小程序录制能力n Android 端基于 UIAutomator2 坐标换控件(百度小程序为优化体验,使用了端贴片技术,因此需支持端控件相关录制能力)Bat Engine百度小程序运行时宿主 APPWDA(iOS)UIAutomator2(android)(问题:iOS 暂无录制方案,可能考虑基于图像的用例转化)设备真机录制回放 效果&问题功能iOS 暂无有效的录制方案考虑用图像方式直转,达到一处录制,到处运行的效果支持 Android 端&百度小程序录制录制支持小程序请求的捕获&Mock,方便后端服务 -变更情况回归前端 UIMock支持元素
12、存在、属性、同 截图比对准确率在一定场景下类数、截图比对等断言 影响用例稳定(内容/分辨率)断言体验表格形式维护用例,断言 录制过程需在操作手机&PC 完设置、单步调试方便善断言间切换,略显繁琐问题n 录制好的用例怎么和测试场景更好的结合,从而派上用场?比如:UI 监控场景,CI 流水线场景,自动化兼容性测试等内部应用小故事录制回放能力自今年 5 月产品化以来,直接应用在了百度运营活动多个大事件活动自动化测试上。将活动兼容性测试耗时降低了 30%,整体自动化测试效率提升数倍,连外包同学都可以轻松参与自动化建设。PM 使用直接使用录制回放工具对 Top 电商小程序核心转化场景功能可用性进行监控。
13、n 单纯通过录制&断言设定,问题发现依旧有限,有否更好的方式?比如:提供通用的异常检测能力,如:白屏、死链、控件无效检测等?解法云真机测试服务云真机测试服务 调研解决方案整合真机集群管控能力、UI 自动化操控能力以及异常检测能力,将基于真机的 UI 自动化测试能力以服务化的方式提供出来。定义n 安全性考量进驻使用了 MTC 拥有 单向独立外网环境 的真机机房业务特性和需求分析n 业务考量:n 安全性:小程序在任务执行时,容易被当做跳板,进行网络攻击n 稳定&效率:云真机服务需对接机器审核等业务,稳定性&执行效率要求高n 检测能力:业务所需检测能力达数十项,涉及 UI、文本、体验等n 设备成本:
14、2019 年底需支撑天级上万审核/巡检任务,设备成本如何控制基于 betterAutoTest 从 0 到 1 建设云真机控制服务,充分拥有小程序操控能力,最大化稳定性和执行效率n 检测能力考量:除小程序特性异常检测外,诸如图像、文本类等的检测能力基于公司 EasyDL 及 iCheck 等平台建设n 设备成本:独立网络的 稳定高效 检测能力丰富 设备成本低真机机房探索使用树莓派 + Android开发板方案,替代主机+真机资源,以降低设备成本。(业务考量)(能力考量)(成本考量)(安全性考量)云真机测试服务 方案统一开放 API任务发起任务调度结果查询&回调集群管控服务-内网服务任务调度检测
15、策略集成服务资源控制真机运维敏批量复制生产者消费者模式集群管控服务-外网服务结果回传Swan api 调用任务消费设备注册图片拉伸局部乱码图集群控制主机策略控制模块Bat CloudAPP 更新广度遍历 定向页面 用例执行使用百度成熟的 AI & 图像检测能力依赖检测平台Bat AgentiCheck准召率数据闭环,反哺 AI 训练学习不可被访问独立外网云真机测试服务 应用一:自动化兼容性测试基于云真机测试服务&录制回放用例,产出了 兼容性自动化测试 的云端解决方案:n 录制用例上传云端n 云端一键多机回放,截屏比对n 叠加白屏、死链等通用检测策略云真机测试服务 应用二:云测试支持开发者一键发
16、起自检的小程序云测试是一套基于云端真机集群的自动化检测方案,用以帮助开发者较为全面地评估待提审小程序的质量,发现小程序缺陷,以提高审核通过率。技术方案:基于云真机集群控制服务,通过编写广度遍历算法遍历被测小程序,并获取截图、Dom、图片、链接、运行时等信息,然后通过系列异常检测策略发掘问题。坑点分享:n 遍历过程可能会出现 各类型弹框阻塞遍历 进行n 遍历过程可能发生 跳出 小程序/APP 的情况云真机测试服务 应用三:用例联动框架质量保障将第三方小程序录制的稳定用例(一般为监控用例),应用于 小程序框架本身迭代回归云真机测试服务 应用四:持续集成流水线将录制的用例,通过云真机测试服务应用于
17、小程序开发的持续集成流水线思考&展望: 小程序作为一种渐进成熟的开发生态,未来,针对小程序的持续集成流水线必将应运而生,而智能测试近来也渐上舞台,智能测试加持 的 CI 流水线将对持续交付产生新的影响宿主 APP 接【阶段】小程序提审后,在线运维阶段【诉求】保障在线小程序对用户的质量&体验解决方案:通过自动化手段发现&排除问题【阶段】小程序开发测试阶段【诉求】保障提审质量解决方案:提供低成本的测试手段CTS 一致性兼容测试套件小程序框架 CI云测试录制回放第三方用例联动质量保障自动化测试框架云真机测试服务百度小程序测试引擎生态质量管控 宿主 APP 接入&框架质量保障【CTS:一致性兼容测试套
18、件】【小程序框架 CI】通过一个专属小程序作为被测实体,以开发者视角针对小程序提供的组件、API、插件、及框架本身等特性进行功能覆盖,经由测试引擎调起测试。除了在 local、branch 阶段做代码检查、自动化测试、覆盖率外,核心在发布分支进行以下保障工作:全量 CTS三方用 如何保证 CTS 用例的有效覆盖? CI 过程测试执行过长将影响迭代,如何提效? 真机资源宝贵,成本如何控制?存在的问题展望提效:通过代码打点等方式,获取用例同代码间的关联关系,在代码 CI 阶段,通过代码Diff 等手段,直接将本次代码 CI 影响同对应用例关联,以最小的成本执行测试构建。智能化测试探索 提覆盖:通过
19、日志打点/云测等手段收集各小程序组件/API使用方式,自动生成覆盖用例。生态质量管控 小程序提审&在线阶段数据监控,真机复验按照红线标准,通过云测试能力,24 hour不间断巡检线上小程序线上数据监控发现白屏/请求失败等问题真机复验及时清理线上故障小程序,保障用户体验防止恶意开发者通过热更技术影响用户体验发现违反质量标准,通知整改/下线上线人工审核小程序提审预检测质量分级按照准入标准使用云测试机器审核及时反馈开发者提供详尽缺陷报告按质量级别分发流量流量分发按照分级标准,使用真机能力,产出各项指标打分,辅助流量分发,让良币驱逐劣币,质量高的小程序脱颖而出在还未进入人审流程的时候,及时回馈问题,提
20、升小程序迭代效率展望 - 小程序持续集成2020 年,我们期望为小程序开发者提供一套 低成本、高召回、高效的 小程序智能化交付系统智能化交付系统基础交付流程智能测试加持保障测试完备性低成本,高完备更高效的审核Android 用例自动转化iOS/web 直接回放经由代码 Diff 的测试完备度预警新小程序冷启动用例生成多机回放人审使用特制编译包特制包埋点跟踪人审行为UI 自动化用例录制小程序代码提交自动化编译打包UI 自动化用例回放广度遍历云测试小程序提审执行效率提升,成本节约精准用例选择有效性提升,提高召回智能云测试进阶:场景化智能初阶:单控件智能定点打桩特制编译包基于控件识别的仿人工遍历基于特征模型的功能场景学习回放学习建立代码用例映射用例自动生成行为建模日志埋点低成本,高召回总结n 拥有被测对象的有效操控手段,是自动化测试开展的基础n 基于真机的录制回放能力,是解决 UI 自动化测试噩梦的利器n 云真机测试服务的建设,为开展 UI 兼容性、监控、CI 流水线等奠定了基石