1. 项目背景
美团外卖的业务场景比较多元化,除了外卖自身的业务,还作为平台承接了闪购、团好货、医药、跑腿等其他业务。除此之外,在全链路动态化的大基调下,外卖各个页面的技术形态也变得越来越复杂,除了Native代码,还包括Mach(外卖自研动态化框架)、React Native、美团小程序、H5等,不同技术栈的底层技术实现不同,渲染机制不同,进而对测试方式要求也有所不同,这也在无形中增加了测试的难度。下图汇总了美团多业务、多技术、多App的一些典型场景。
图1 多业务、多技术栈、多App
在产品交付上线的过程中,测试的占比也是非常大的,甚至大于总时长的30%。如下图所示,整个测试包括了冒烟测试、新功能测试、二轮回归测试、三轮测试。然而,现在需求测试绝大部分还是采用非自动化的方式,这就使得人力成本变得非常之高。
图2 外卖迭代模型
另一方面,相比于2018年,2022年的测试用例数量增长近3倍,已经超过1万2千条(如下图所示)。同时,外卖的业务是“三端复用”,除了外卖App,还需要集成到美团App和大众点评App上,这样一来,测试工作量就翻了3倍,业务测试压力之大可想而知。如果按照当前的增长趋势持续下去,要保障外卖业务的稳定,就必须持续不断地投入大量的人力成本,所以引入能够支持外卖“多业务场景”、“多App复用”、“多技术栈” 特点的自动化测试工具来提升人效和质量,势在必行。
图3 近几年用例增长变化
2. 项目目标
为了解决外卖面临的测试困境,我们尝试去探索一种零学习成本、低维护、高可用的自动化测试方案,能够支持外卖复杂多变的测试场景,它必须同时满足下面几点要求:
- 易用性:工具/平台的上手难度,使用复杂度应该尽可能的低,因为自动化测试的目的是提效人力,而不是增加人力负担。
- 平台支持:移动端至少需要覆盖iOS和Android双平台,同时基于外卖的业务特点,不仅需要对Native支持,也需要支持Mach(自研局部动态化框架)、H5、React Native、美团小程序等技术栈。
- 稳定性:自动化测试用例的执行需要有足够的稳定性和准确性,测试过程中不应因测试工具本身的不稳定而出现稳定性问题。
- 维护成本:维护成本很大程度上决定了测试工作量的大小,因需求产生变动或架构重构等问题时,用例的维护成本应该尽可能的小。
- 可扩展性:当测试方案不能满足测试需求时,工具/平台应具备可扩展的能力。
3. 方案选型
自动化测试工具那么多,自研是重复造轮子吗?
针对终端的UI自动化测试工具/平台可谓“屡见不鲜”,市面上也有很多相对成熟的方案,相信大家都有用过,或者至少有所耳闻,但这些方案是否能真的满足我们提效的诉求呢?以下我们挑选了三类非常具有代表性的自动化测试工具/平台 - Appium、Airtest Project、SoloPi进行了分析,来帮助大家对自动化测试技术建立一个认知:
— | Appium | Airtest Project | SoloPi |
---|---|---|---|
脚本语言 | 支持Python,Java,JavaScript,PHP,C#,Ruby,OC等 | Python | / |
数据记录(网络/本地) | 不支持 | 不支持 | 不支持 |
环境模拟 | 不支持 | 不支持 | 不支持 |
上手难度 | 高,需要各种环境支持和语言学习 | 一般,不熟悉编程语言,也可以一定程度使用 | 低,用例即操作,不展示 |
问题溯源成本 | 高 | 高 | 高 |
维护成本 | 高 | 高 | 高 |
视图检索 | 基于UI控件的检索,支持10多种UI控件查找方式 | 基于图像识别和基于UI控件检索两种方式 | 基于图像识别和基于UI控件检索两种方式 |
源码集成 | 无需 | 可选 | 无需 |
WebView支持 | 支持 | 支持 | 支持 |
用例编辑 | 支持 | 支持 | 支持 |
平台支持 | iOS、Android、Windows | iOS、Android、Windows、游戏测试 | Android |
- Appium是一个开源工具,用于自动化测试iOS手机、Android手机和Windows桌面平台上的原生、移动 Web和混合应用。它使用了各系统自带的自动化框架,无需SDK集成,Appium把这些系统本身提供的框架包装进一套API——WebDriver API中,可以使用任何语言编写Client脚本向服务器发送适当的HTTP请求。这让不同技术栈的人员都能快速上手编写测试用例,可以选择自己最为熟悉的语言,但是对于没有语言开发基础的人来说,还是有一定学习成本,而且这种方式在多人协作时并没有太大作用,为了保证自动化用例的可维护性,团队内部应该需要统一脚本语言。值得一提的是:Appium在iOS、Android和 Windows 测试套件之间可做的一定程度的复用代码。但是由于不同端界面及元素定位的差异,这往往是不现实的,更无法保证测试的准确性,所以这种所谓的“跨端”就变得毫无意义。
- Airtest Project是由网易游戏推出的一款自动化测试平台,除了支持通过系统自带的自动化测试框架,还支持了通过图像识别的方式,对于非基于原生UI系统的一些游戏引擎提供了SDK的支持。其上手难度稍低,可以一定程度上通过IDE进行相关操作来生成简单的