作者简介
Liang,携程研发总监,关注DevOps,前端&服务端质量保障、能效提升;
Tony,携程资深测试经理,关注自动化测试框架及平台类工具开发。
一、背景
在携程内部业务高频率敏捷迭代发布节奏下,线上生产服务质量需要同步快速提升。这就依赖自动化测试的覆盖率提升,测试任务执行频次提升,测试任务执行速率提升。
通过调研机票前台内部,以及携程其他事业部前台研发和测试团队,发现存在普遍共性痛点。需要清晰化解耦自动化测试体系的三层架构,解决当前核心瓶颈。
SaaS上层服务,例如UI测试,API测试,兼容性测试,稳定性测试。
PaaS中层服务,例如测试用例管理,测试任务调度,测试框架驱动。
IaaS底层服务,测试用例代码最终执行和测试报告输出功能。
laas底层服务,公司各事业部的前端团队普遍通过采购手机设备,组建自动化测试设备小集群方案,或者基于开发测试人员的个人测试手机进行本地测试执行工作。这两种方式都存在一些问题。
1.1 IaaS 底层服务现状问题
1)测试手机采购成本较高。需要覆盖众多系统版本,众多厂商型号,以及持续更新换代。
2)测试手机的厂商型号差异化,导致自建小型测试设备集群的技术方案和运维管理困难。并且长期运行导致手机电池老化加速,电池膨胀损坏主板芯片,甚至存在潜在火灾隐患。
3)测试手机的用例执行稳定性和规模化受限,导致PaaS及SaaS上层的测试任务集整体执行效率降低。测试用例执行需要排队等待,测试任务容易运行失败,测试任务执行总耗时长。在集中发布日或大版本发布期间,大批量集成和回归测试用例集的任务堵塞拥挤。
1.2 IaaS 底层基建不稳对业务研发的影响
1)自动化测试工作的推广普及率和覆盖率受限。开发和测试人员在自动化测试工作中,很多耗时用于分析 Failed Job 日志,重启重试测试任务,修复运行兼容性问题。
2)海量测试用例集的总运行耗时较长,导致DevOps闭环反馈流程迟缓。于是大部分团队将自动化测试任务的频率延长到每天一次,每周一次,甚至每个版本一次。
3)自动化测试落地受阻,导致研发团队的生产交付质量被迫继续依赖手工测试团队的人工密集重复执行。手工测试容易人为疏忽遗漏,以及带来研发成本的固定支出。
二、项目目标
重构IaaS底层基建系统,降低采购和运维成本,提升测试任务可靠性和性能速度。提供通用测试设备服务,无缝支持多种上层测试框架,方便全公司各种前端团队的测试框架系统低成本接入。
三、系统选型
行业方案主要有三种:公有云真机集群、私有云真机集群和私有云虚拟机集群。
3.1 公有云真机集群
公有云真机集群是指使用行业内一些公司提供的云真机服务,例如 Testin,WeTest,以及华为,三星等厂商提供的真机云测实验室等,通常按照使用时间和使用设备数量收费。
优点:无需自建,公有云真机集群的设备型号较为完备。
缺点:费用成本中等,但是通常仅支持少量几种主流成熟测试框架,公司内各团队历史积累的测试用例集迁移成本较高。并且无法支持测试任务运行时依赖的众多内网系统,例如Mock服务、SOA服务等等。导致真正可测试覆盖的场景受限,对线上生产交付的质量保障有限。
3.2 私有云真机集群
自建方式,需要采购真机设备和专用机柜,如需满足大规模测试用例集的高频率高并发执行,就要相应采购大量手机设备。
优点:真机设备的性能较好,并且可以针对性覆盖一些特殊测试场景,例如挖孔屏、折叠屏,特定厂商API等等。
缺点:设备数量决定了测试用例集合的并发执行速度,因此前期成本投入较高,只有当大量研发团队和测试用例任务接入后,才能逐渐平摊降低成本,并且始终存在设备运维更新换代的成本支出。
现状:携程机票前端自动化测试开发团队自2017年至今使用该方案实现小型测试设备集群,通过若干台Mac mini驱动管理大约20台手机真机设备。目前该方案仍然持续运维,作为私有云虚拟机集群的补充。真机设备来源于常规采购的日常开发调试工作的淘汰换置。随着使用时间增加,安卓系统更新换代,部分设备性能逐渐下降,给研发人员日常开发调试使用带来不便。于是我们就将其换置托管到自动化测试集群,发挥余热。
3.3 私有云虚拟机集群
自建方式,使用安卓虚拟机镜像(Android Virtual Device,以下简称AVD)执行测试,以此组成测试设备集群,搭配一套管理系统对其