背景
近期调研了一些自动化测试方案,整理了一下,本篇大体结构如下:
- 目标
- 选择
- 方案对比
- Macaca介绍
- 实践和展望
一、目标
- 在版本快速迭代下,实现核心功能的UI自动化测试,释放测试人力资源。
- 通过持续集成的自动化测试,尽早暴露问题和风险。
- 实现性能的自动化测试。
二、选择
- 由支付宝团队开源并维护的Macaca无线自动化测试方案,入手简单,学习成本低,维护成本适中,社区活跃度高。对比其他技术方案是我们目前的最佳选择。
三、方案对比
对比结果:
在多端支持上Appium和Macaca做的最好。另外相对于Appium,Macaca还有以下优势:
- Macaca提供了更全面的工具支持,包括持续集成平台Reliable,元素查找器App-inspector,脚本录制工具UI Recorder等。
- Appium对于UI元素和Drive等类别API均不一样,Macaca从底层就屏蔽了各平台区别,除了系统特有的API外,可以使用统一的API实现,降低了学习和维护成本。
综合以上因素分析,Macaca整体上更为优秀,是我们现阶段最好的选择。
四、Macaca介绍
Macaca 是由支付宝开源并维护的面向多端的自动化测试方案。(地址:https://macacajs.com)
- 跨平台:支持在移动端和PC端的Native, Hybrid, 移动端web应用的自动测试。
- 支持真机:支持真机和模拟器
- 更加容易:支持多种语言编写脚本,提供单步调试,元素查看器,录制回放等周边工具。
- 提供CI方案:提供持续集成方案及持续集成平台的私有部署方案。
(一)Macaca架构设计
(二)Macaca用例执行流程
(三)元素查看器 app-inspector
- Android&IOS统一的元素查看器。通过元素查看器可以快速定位不同平台的界面元素,便于测试人员在不熟悉平台业务开发的情况下进行用例的编写,降低实现用例成本。
(四)元素查看器 App-inspector 原理
- 初始化时启动手机设备上的 UIAutomatorWD 或 XCTestWD 服务
- 向 UIAutomatorWD 或 XCTestWD 先后发送 /source 和 /screenshot 请求
- 将每次时序获取的截图和 Hierarchy 做映射,渲染到用户浏览器
- 在iOS上基于XCTest封装为XCTestWD在Android基于UI Automator封装为UIAutomatorWD
- iOS-Simulator,iOS-utils,Macaca-adb用于设备检查和日志输入
- 跨多端,同时支持两个平台,避免了维护两套环境的困窘。
- 完全WEB化,实体是一个 WEB 服务,方便各处部署,只要有标准浏览器即可使用。
(五)基本录制器 UI Recorder
- 可以通过录制获得脚本,降低编写用例的成本。
- 录制工具适用于功能稳定的场景。自动生成的用例可维护性较低,无法模块化,二次维护成本较高,只能重新录制。
(六)基本录制器 UI Recorder原理
- 启动 Macaca Server,提供 Web Driver 服务
- UIRecorder 在启动时会启动 ChromeDriver 服务
- 并加载内置的 Chrome 扩展程序
- UIRecorder 在操作层和 WebDriver 服务端做了良好的解耦设计, PC 端重度依赖 Chrome Extension 的事件拦截,移动端直接则与 Macaca Server 通信。
- Drag的处理较为复杂,需要通过监听判断是单纯的点击还是长按,然后通过页面偏移的事件监听来实现
(七)持续集成平台 - Reliable
- 基于Node.js 实现的分布式持续集成服务,提供可视化数据报表
- 结构分为reliable-master和reliable-slave,可以用三种模式部署,为单点模式,集群模式和众包模式
- 集群负载,合理调配
- 提供插件机制,易扩展
- 部署简单,可以一键部署
- 便于接入 Gitlab、Github 等社区化系统
(八)测试报告输出
- Macaca提供了自定义报告器,完全可以根据业务的需求自定义需要的报告输出格式,同时可以利用钉钉,旺旺等社交工具进行报告自动通知,主要帮助开发和测试人员快速定位和解决问题
- Reliable可持续集成平台则提供了可视化数据报表,可以帮助团队leader迅速了解大盘情况
五、实践和展望
(一)实践
实践TIPS:
1、对于UI自动化测试,Macaca保证在UI元素找到的情况下才会执行逻辑案例,对于无法找到UI元素则会出错,用例编写人员可以通过app-inspector再次查找并调试修改用例脚本。
2、对于UI自动化用例的场景,需要有侧重点,用例应当集中:
- UI 的文本、图片显示正确性,不同场景下文案是不一致的
- UI 的交互逻辑以及功能模块正确性测试,如iOS和Android快速返回列表头部
- 链路测试正确性,即不同场景不同页面跳转是否正常
3、开发人员开发中也需要注意,帮助用例编写人员顺利编写和完成用例,比如UI元素,iOS开发应该注意accessibility Id的赋值,而Android开发则应该注意resource Id的赋值
(二)展望
对于未来发展,由于Macaca是开源,我们还可以考虑进行完善和扩展:
- 在目前Macaca完善的统一API机制和脚本录制工具的基础上,我们可以考虑完全自动化脚本编写的可能,仅仅操作就完成用例的编写。
- Macaca目前UI元素的处理上仍需要开发介入,帮助埋入各自平台UI元素标签,因此可以考虑使用天猫的全链路等方案,直接自动埋入测试标签。
- 结合Macaca的计算机视觉解决方案,持续优化相关开源库算法。拓展可测试场景。
非本人授权,禁止转载,否则将保留追究法律责任的权利!