引言
O2O 市场和智能手机在高速发展中,饿了么作为一家领先的 O2O 移动互联网公司,业务也在随之不断扩张。App 功能越来复杂,加之移动端的技术方案多样化、国内网络环境复杂等问题,做好 App 的测试就面临着诸多挑战,本文大致讲述目前饿了么在 App 测试上遇到的挑战,以及应对挑战所作出的努力。
挑战
饿了么目前 DAU 已达千万级,在快速适应市场需要、迎合用户需求、提供良好的用户体验的背景和要求下,移动端的测试、开发人员都面临着一些新的挑战。
第三方自动化工具不够给力
饿了么业务高速发展中,场景越来越复杂和多样化,App 的新功能、新特性也越来越丰富,因此回归测试所需时间和人力也越来越多,急需能够有效提高测试效率的自动化解决方案。
对于测试人员来说,在快速迭代、UI频繁变动的情况下,时间、人力有限,无法做到全面的回归测试是最大的痛点。使用一些第三方工具进行脚本录制或者脚本编写 (如 appium 等) ,ROI 很低,测试人员往往需要根据 UI 的变动反复修改脚本,同时还要兼顾迭代内的测试任务,脚本的修改速度跟不上 UI 的变动速度,维护成本很高,最终还是不能很好的解决回归测试覆盖率不足的问题。
App性能问题越来越被重视
在用户至上、体验为王的当下,如何节省电量、流量,如何保证 App 顺畅运行变得越来越重要。相应的,测试人员在测试过程中,需要对 App 的性能问题进行更多的关注。因此需要测试人员全程采集App的实时性能数据 (内存、CPU、流量、FPS 等) ,并针对这些数据做进一步的综合分析,比如内存突然增大且没有回落出现在哪个时间点,对应的测试步骤、功能页面是哪个等等。性能数据多且分散、手工测试和数据记录时间线的分离,都会造成测试人员发现、定位问题变得困难。
对于开发人员来说性能问题的解决起来也不轻松。测试过程中采集到的性能数据仅能反应 App 运行时的外在表现,对应到代码内部,涉及的范围非常的广,除了 App 本身的源码,还会涉及 SDK 等第三方的源码,排查起来非常的耗费时间。
小结
面对以上挑战,许多大厂&对移动技术有追求的公司,都会去下功夫研发自己的自动化测试平台。饿了么移动基础框架团队通过研发 Stellar 测试平台,来帮助测试人员更好、更高效的完成移动端的测试工作。
解决方案 - Stellar测试平台
有了移动端的录制回放 SDK ,就需要一个可以管理脚本、执行脚本、记录结果的操作平台,将录制-回放-记录结果这个过程串联起来。因此诞生了 Stellar 移动测试平台。
架构设计
下图是平台的分层架构图:
平台主要分为前端、服务、移动端3层。其中前端为 Web 页面,是与用户交互的入口,提供脚本管理、脚本调试、测试报告查看等功能。服务层是前端和移动端的承接层,负责脚本管理、脚本执行任务调度、测试报告生成、网络请求 mock 等。移动端以 SDK 的形式接入被测 App,记录UI操作和控件、代理网络请求并发送给 mock server、回放脚本、记录 log 和性能数据等。
流程
被测 App 接入 SDK 后,用户可通过连接码将手里的测试机与平台建立连接,从而实现脚本录制、回放等操作。除了打开平台,建立连接之外,脚本录制均在移动端进行。测试人员将测试机与平台连接后,可正常按照测试用例在手机端进行操作,SDK 会录制整个测试过程并将网络请求发送给 mock server,对于测试人员来说没有其它额外操作,提高了脚本录制的效率、降低了操作复杂度。
为了方便测试人员快速到达被测功能,SDK 提供了场景选择功能,在录制时可选择起始场景,直接到达被测页面,节省测试人员的时间。由于录制过程中已经将网络请求保存在 mock server,在回放时,请求全部来自于 mock server,保证回放的稳定性。测试人员可根据实际情况选择某个请求走 mock server 还是使用真实的数据。后续还会提供网络请求编辑的功能,由测试人员自己定义网络请求。
技术方案简介
前端主要是用饿了么大前端研发的 Element 框架结合 WEditor 开发。Element 详细介绍请移步:http://element.eleme.io/#/zh-CN
Service 层主要是 Java 后端,还有一小部分基于 STF 的二次开发。其中 Java 后端包括脚本管理、测试报告、mock server,任务调度部分由基于 STF 的二次开发来实现。
移动端通过内嵌 SDK 的方式,对 UI 操作进行代理和记录, 同时支持 iOS 和 Android 端。Android 端的实现思路是通过内嵌 SDK 的方式,对 UI 操作进行代理和记录。基本原理是在 App 之上增加一层中间层,用来获取和记录屏幕上的 UI 操作。如下图:
Android SDK 的实现思路是对 UI 操作进行代理和记录,在回放时基于 Instrumentation 方式进行回放。iOS SDK 的实现思路是监听 Responder Chain 中分发的事件,对事件进一步分析,记录事件的路径及点击区域。回放时采用同样方法下发。
以上的平台设计,对于测试人员来说,几乎不需要额外的操作就可以进行录制回放。只需要打开录制开关,按照已编写好的测试用例对 App 进行手工测试,测试完成后,脚本就录制完成了。平台将录制的脚本转化成易读性强的步骤,测试人员可以通过平台进行二次编辑和脚本回放操作。
在实现了录制回放功能后,根据测试人员的使用场景,又增加了对起始录制场景的支持,可在接入 SDK 时由开发人员根据测试人员的需求定制录制的起始场景,方便测试人员快速到达自己负责的功能模块,不需要额外录制 App 的起始页面到被测模块之间的过路场景。
后续会有介绍技术方案的文章,欢迎大家持续关注。
总结
Stellar 测试平台研发的目的是为了解决移动端测试的痛点和挑战,测试人员可通过便捷的操作,对 UI 页面进行自动化脚本录制、回放,同时可在脚本回放过程中收集 App 的性能数据,并可在测试过程中一键记录 bug 对应的系统快照、提交至 bug 管理系统。未来还将增加深度性能分析,在代码层级给出性能问题点,帮助开发人员快速定位问题。
在移动测试快速发展的今天,希望通过我们的探索和努力,帮助更多的测试、开发人员提高效率。
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h63547.shtml