客户端自动化测试在网易云音乐的实践与落地

AlgoLunarHorizon
• 阅读 373
本文作者:吕雨强

一、背景

时间线回到 2021 年

云音乐目前版本双周迭代,在集成测试阶段会花费两天时间,在这两天时间里面有相当部分时间是人工进行用例回归,而且目前 UI 自动化现有方案会存在较多问题,导致目前这块的效率和质量均不太理想,而对业务侧又希望能降低业务上线的周期。

目前云音乐每个新版本质量稳定性不是很理想,在前一个版本上崩溃率做到了质量基线,下个版本很可能就快速反弹。

同时伴随着的以下一些痛点:

  • 测试回归人工效率低,目前使用的 appium、smartAuto 等框架均有部分缺陷,主要集中在用例维护成本高、UI 检索稳定性保障难、新版本用例录入不及时、双端一致性难保障、问题回溯定位效率低下等;
  • 自动化测试对于用例和设备调度及管理基本靠人工进行;
  • 冒烟测试等工作没有对应的高效验收机制和服务能力,主要依赖线下沟通;
  • 自动化用例没有统一的调度管理平台,在 tc 用例平台执行用例时,无法精准筛选自动化用例执行,且每次执行结果保存也不直观。

二、Saturn 平台简介

基于上述背景,2021 年下半年云音乐大前端 QA 与公技团队共同搭建 Saturn 平台。Saturn 的核心功能主要包括:

  • 用例录制:手机端操作录制,录制过程记录控件信息、操作信息、埋点信息、截图等扩展信息;
  • 用例管理:录制的用例上传到 Saturn 后,进行维护、分类、放到各自模块以及执行集等;
  • 执行集:定义各自需要执行的用例的集合,方便用例快速执行与制定执行计划;
  • 设备调度:支持私有化部署、支持私有化调度、支持按测试类型调度、支持多 APP 之间调度、支持指定设备调度、支持随机分配设备等;
  • 用例执行:根据执行设置分配执行机,把用例分发到指定 provider 端,provider 根据下发消息调度 Athena/NETestWD 执行自动化;
  • 报告:报告汇总、执行步骤展示及执行截图、手动标记 check、失败原因归类、执行过程录屏与日志;
  • 设备管理:自有设备的上下线、自有设备的用途、自有设备的部署类别;
  • 各个专项,UI 自动化,RN 自动化,启动性能自动化,稳定性测试,覆盖安装等等

接下来,本文讲重点介绍 Saturn 平台设计思路、技术演进,专项,落地成果。

三、Saturn 平台架构

Saturn 平台主要分为

  1. 平台端:主要是用户交互、设备管理与调度;
  2. Android provider 端:部署在 mac 或者 pc 上用于 Android 手机的监控、与平台端交互、下发执行自动化任务;
  3. Athena APP:主要用于录制与回放自动化用例、上报用例、上报用例执行结果;
  4. Android 端内置 SDK:辅助 Athena 录制与回放自动化用例、准备用例执行环境(登录、mock、后台环境等);
  5. iOS provider 端:部署在 mac 上用于 iOS 设备监控、与平台端交互、下发执行自动化任务、维护 WDA、NETestWD 的稳定;
  6. NETestWD:用于启动被测应用、接收用例、上报自动化用例执行结果;
  7. WDA(WebDriverAgent):处理 iOS 端设备上的系统弹框;
  8. iOS 端内置 SDK:主要用于录制自动化用例、准备用例执行环境(登录、mock、后台环境等)、执行自动化用例;

如下面架构图所示:

客户端自动化测试在网易云音乐的实践与落地

四、Saturn 设计原理

4.1 Saturn 平台设备调度工作流程

设备调度工作流程用户执行用例,后台逻辑处理然后入库 history 表、发送 SystemHistory 消息入库 queue 表;SystemHistory 消息消费线程监听 queue 表中 SystemHistory 消息,获取消息后进行处理按照 Android/iOS 设备发送新的消息入库 queue 表;Android/iOS 消息消费线程监听 queue 表中 Android/iOS 消息,获取消息并锁定消息,之后检测可用设备,如果无空闲设备则释放消息,如果有空闲设备通过 websocket 下发消息并删除 queue 表中消息,provider 端接收到消息进行解析,执行自动化用例,执行完成后上报执行结果到平台,平台会更新用例执行结果并释放设备。

设备调度支持私有化部署、支持私有化调度、支持按测试类型调度、支持多 APP 之间调度、支持指定设备调度、支持随机分配设备等;

4.1.1 设备管理页面

客户端自动化测试在网易云音乐的实践与落地

4.2 Saturn 平台 Athena 工作流程

Athena 通过 adb 在录制时监听事件,回放时发送时间;通过 Accessibility 遍历节点、获取节点信息;

录制时

  • Athena 记录操作节点信息、操作信息、埋点信息;

回放时

  • Athena 通过内置 SDK 快速准备环境,免去大量前置步骤执行;
  • Athena 优先通过埋点信息确定目标节点,无埋点信息时通过使用多种查找方式遍历多次计算综合得分确定目标节点;
  • Athena 会自动处理系统弹框,防止弹框对自动化执行的影响。

客户端自动化测试在网易云音乐的实践与落地

4.3 Saturn 平台 iOS 内置 SDK 工作流程

录制时

  • 触摸、滚动事件的采集是通过 AOP 的方式进行采集信息,比如点击事件,通过拦截 UIControl 的 sendAction 方法和 UIView 的 addGestureRecognizer 方法,滚动时间通过 hook UISCrollViewDelegate 进行消息转发;
  • 键盘输入、断言事件的采集目前没有很自然的方式,所以都是通过一个交互工具来手动进行录制;

回放时

  • 回放的核心点是 UIAppliction 的 sendEvent 方法,sendEvent 方法是触摸事件分发的入口,回放时通过构造 UIEvent 再通过 sendEvent 方法进行事件分发;
  • 快速环境准备,免去大量前置步骤执行;
  • 执行时会优先使用埋点信息确定目标节点,无埋点信息时通过 xpath 定位的方式确定目标节点。

4.4 Saturn 自动化用例平台存储

用例以 json 表达式,保存自动化的执行环境,需要 mock 的接口, 账号密码, 自动化步骤等信息。

客户端自动化测试在网易云音乐的实践与落地

4.5 设备机房

客户端自动化测试在网易云音乐的实践与落地

五、在云音乐中的应用

UI 自动化测试

可定时触发,可以手动触发, 与能效平台打通能 CI 触发。

执行情况

客户端自动化测试在网易云音乐的实践与落地

算上失败重跑 2 次, 一小时单台设备平均是能执行 30 条以上自动化用例

对用例执行情况,可查看截图和视频

客户端自动化测试在网易云音乐的实践与落地

客户端自动化测试在网易云音乐的实践与落地

兼容性测试

对需要测试兼容性的用例,可选择兼容性测试,自动从每一个系统中选出设备进行测试

客户端自动化测试在网易云音乐的实践与落地

稳定性测试

双端都可定时触发,可以手动触发 ,底层采用开源项目 Fastbot

客户端自动化测试在网易云音乐的实践与落地

启动性能自动化

通过定时打包,定时启动自动化,获取平台埋点的启动数据,可视化展示启动数据。 跟踪启动数据,防止启动劣化。

客户端自动化测试在网易云音乐的实践与落地

RN 自动化

图像对比 RN 页面

客户端自动化测试在网易云音乐的实践与落地

六、云音乐客户端自动化效果

客户端自动化测试在网易云音乐的实践与落地

  • 有效降低学习成本:人人均可录制测试用例;
  • Android 端 P0 级用例覆盖率 72.95%,执行成功率 91.87%;
  • iOS 端 P0 级用例覆盖率 71.86%,执行成功率 91.33%;
  • 用例创建和维护效率,相比 Appium 和 Smartauto,分别提升了 9 倍和 3 倍;
  • 用例执行效率提升 1.5 倍以上;
  • 用例执行成功率提升 2 倍以上,稳定在 90%以上;
  • 问题定位效率从天级别缩短小时;
  • 迭代回归缩短 0.5 天;
  • 双端同一埋点自动化用例可以复用;
  • 用例易修改,位置变动可直接更新自动化用例的 json 数据;
  • 平台整体录制自动化用例两千条以上;
  • 执行自动化用例年均二十万次以上;
  • 发现功能问题和稳定性问题几十个;

七、参考资料

[1] https://github.com/appium/WebDriverAgent

[2] https://github.com/alipay/SoloPi

[3] https://github.com/openatx/atxserver2

[4] https://github.com/bytedance/Fastbot_iOS

[5] https://github.com/bytedance/Fastbot_Android

[6] https://github.com/alibaba/tidevice

最后

客户端自动化测试在网易云音乐的实践与落地
更多岗位,可进入网易招聘官网查看 https://hr.163.com/

点赞
收藏
评论区
推荐文章
前端精准测试实践
作者:京东云质量部背景随着前端技术发展,已经转变为数据绑定为主流的框架方式,与后端服务一样,前端代码实现也会涉及相互依赖,引用这些场景,那么应该如何准确的评估前端代码改动的影响范围?依赖开发评估?依靠经验评估?或者直接前端自动化全回归?手工测试全回归?显然
前端自动化测试之葵花宝典
Web前端自动化测试是一种可以提高测试效率、减少测试成本和提高测试质量的方法,适用于各种类型的Web应用程序。本文谈谈前端自动化测试从入门到精通再到专家级的方案与思维
Stella981 Stella981
3年前
ReactNative自定义车牌号输入框及键盘实现
项目背景目前使用ReactNative技术重构公司的原生Android应用,很多场景是和公司的需求密切相关的,开发中也遇到不少问题。比如项目中使用的即时聊天解决方案是采用融云,推送采用的是个推方案。原生方面有融云提供的一整套解决方案,包括功能和UI,相对来说,只要进行集成就能轻松添加功能,但对于跨平台方案就需要自定义uI了,我的另一篇推文中也
Wesley13 Wesley13
3年前
QQ玩一玩广告与音效使用总结
QQ玩一玩广告与音效使用总结1、经常遇到的问题观看视频广告时背景音乐没有关闭视频广告看完背景音乐重叠游戏回到后台再回到前台时背景音乐重叠开发环境CocosCreatorV2.0.5手Q版本V7.9.0.3820(目前市场中最新版本)qqPlayCore.jsbui
Easter79 Easter79
3年前
SwiftUI 跨组件数据传递
作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言众所周知,SwiftUI的开发模式与React、Flutter非常相似,即都是声明式UI,由数据驱动(产生)视图,视图也会与数据自动保持同步,框架层会帮你处理“绑定”的问题。在声明式UI中不存在命令式地让一个视图变成xxx
利用ChatGPT提升测试工作效率——测试工程师的新利器(一) | 京东云技术团队
在测试工作中可以辅助功能测试包括需求分析或解读代码(注意代码安全)后生成测试用例,还可以辅助生成代码,接口测试用例,自动化脚本等各个方向起作用。当然实际使用中可能会因为提示词的不同生成的结果需要人工多次对话训练才可以。但是使用chatGPT肯定比不用能提高工作效率。当然具体落地后如何进行量化提效抽象等等问题依然在探索中,迈开第一步后依然任重而道远。
陈哥聊测试 陈哥聊测试
1年前
如何选择合适的自动化测试工具?
自动化测试是高质量软件交付领域中最重要的实践之一。在今天的敏捷开发方法中,几乎任一软件开发过程都需要在开发阶段的某个时候进行自动化测试,以加速回归测试的工作。自动化测试工具可以帮助测试人员以及整个团队专注于自动化工具无法处理的各自任务,但困难的部分就是选择
大模型应用之基于Langchain的测试用例生成
一用例生成实践效果在组内的日常工作安排中,持续优化测试技术、提高测试效率始终是重点任务。近期,我们在探索实践使用大模型生成测试用例,期望能够借助其强大的自然语言处理能力,自动化地生成更全面和高质量的测试用例。当前,公司已经普及使用JoyCoder,我们可以
大模型应用之基于Langchain的测试用例生成
一用例生成实践效果在组内的日常工作安排中,持续优化测试技术、提高测试效率始终是重点任务。近期,我们在探索实践使用大模型生成测试用例,期望能够借助其强大的自然语言处理能力,自动化地生成更全面和高质量的测试用例。当前,公司已经普及使用JoyCoder,我们可以
研发视角浅谈R2流量回放测试
一、背景测试小伙伴们在2023年保障了团队线上系统0问题,这简直就是一项了不起的壮举!这得益于咱们测试组同事对工作的细致投入、风险把控、以及严格遵循流程规范进行测试用例评审、自动化建设、联调推动、回归验证、常态化压测、大促高保真压测、引流回放等多重保险策略
数据驱动测试-从方法探研到最佳实践
在自动化测试实践中,测试数据是制造测试场景的必要条件,本文主要讲述了在沟通自动化框架如何分层,数据如何存储,以及基于单元测试pytest下如何执行。并通过实践案例分享,提供数据驱动测试的具体落地方案。