阿里巴巴CI:CD之分层自动化实践之路

本文涉及的产品
云效 DevOps 流水线,基础版人数 不受限
云效 DevOps 测试管理,基础版人数 不受限
云效 DevOps 制品仓库,基础版人数 不受限
简介: 6月29日,在首届阿里巴巴研发效能嘉年华上,阿里巴巴高级产品经理金桐带来“分层自动化实践之路”的演讲。本文从为什么要做自动化开始谈起,进而对分层自动化单元测试、业务服务层测试和UI测试进行优劣势分析,最后重点分享了阿里分层自动化的实践,包括工具分层和流程优化等。
6月29日,由阿里云研发协同RDC、阿里云云效和云栖社区联合举办的“首届阿里巴巴研发效能嘉年华”上,阿里巴巴高级产品经理金桐带来“分层自动化实践之路”的演讲。本文从为什么要做自动化开始谈起,进而对分层自动化单元测试、业务服务层测试和UI测试进行优劣势分析,最后重点分享了阿里分层自动化的实践,包括工具分层和流程优化等。

 

直播视频请点击

随着云计算、大数据、AI智能等前沿科技的发展,传统的研发速度越来越难满足企业快速发展的需求,研发效能也成了继商业模式、技术突破之后的另一核心竞争力。分层自动化测试倡导的就是将系统分层,不同层次需要用合适的自动化方法进行测试的一种测试策略。本文从大家熟知的单元测试、业务服务层的测试及UI自动化测试,进行优势和劣势的分析,同时从执行速度、维护成本、测试方法、完成优先级、覆盖范围及实施团队等多个维度,为大家提供一套分层自动化实施解决方案,最后重点分享了阿里分层自动化的实践,包括工具分层和流程优化等。一起来了解下吧:

 

自动化

为什么要做自动化?

手工测试效率低下,发布频繁,回归量大、成本高,重复劳动很枯燥。自动化测试,就是用机器执行替代测试手工操作的一种测试方法,能够帮助测试人员从重复、枯燥的手工测试中解放出来,从而节省人力、时间或硬件资源。

节约劳力为(N-1)M,M为此项工作单次需要投入的资源,N为此项工作需要重复工作的次数。

自动化的烦恼

如果自动化这么好,为什么大家没有全部做自动化呢?特别是对于初创公司,自动化测试非常少,原因大致如图。

d192cbea7e371c0622168e01a8a7ca7cc8cd836d

上图不难看出,阿里该部门这一周的自动化失败次数不仅没有与发现bug数成正比,还浪费了测试人员41次自动化失败的排查时间,而这些时间对于做自动化查bug的初衷,都是无意义之举。

为什么外部环境、业务变更、应用环境问题、执行机问题、数据问题、框架问题这些都能引起这么多失败呢?而单单真正查出bug的概率这么低呢?

结合我们的多年自动化实践与总结,自动化存在如下图这些缺点:

b18be5b53787b1b2e25c621fe8cd6f842d07bb0b

总结来看,自动化的烦恼包括以下四方面:

成本高:

人员成本高:基本要懂某种自动化框架的代码语言,要有一定的编码能力,同时代码逻辑要清晰,否则如何能保证合理性、逻辑性、业务性与健壮性这些大大影响自动化成功率的因素?如何能保证自动化测试脚本本身没有bug?

环境成本高:开发环境、运行环境、调度环境等等,接触过代码的同学都知道,一次环境的安装,没有大半天甚至一天是完不成的。同时要让自动化对接到项目自动化流程中,或定时监控等,还需要再开发调度平台,这些成本对于从0到有的测试组,甚至是一家公司,将会是多大?需要投入多少人日的工作量可以完成这些?

效果差:

从图1分析就知道效果如何,然而图1还只是阿里某部门单周的一个采样,就已经浪费了41次排查时间,这样的自动化测试,若运行一年,那效果又会如何?能确保后面没有这些干扰的失败吗?失败次数可以和bug数成正比吗?

覆盖率低:

经常有同学抱怨自动化的覆盖率低,很多分支和逻辑无法覆盖,这大部分原因是这些同学的理解偏差,很多人都将UI自动化作为自动化测试的全部。然而没有一种自动化测试框架可以覆盖一个系统的所有功能点的测试,所以出现自动化覆盖率低的观点。那该如何提高自动化的覆盖率呢?

及时性:

其实从图1中的10次业务变更引起的自动化失败,就是这一缺点的佐证。所谓业务变更,是指正常的项目变更,但脚本未及时更新引起的自动化失败。这种失败恰恰又证明自动化测试是有用的,只要测试覆盖到的内容,一旦有变,自动化就能测试出来。那如何提高我们的脚本及时性呢?

自动化的追求

730d5277a3e0a34c2a2e040c5ae2d75576921f26

面对上述那些问题,我们不禁自问:做自动化测试真的有必要吗?如果有必要,那如何降低这些成本,如何提高测试效果呢?经过不断的实践,我们引入了分层自动化测试的策略。

 

分层自动化

8f2a67cd7dbe44b4a7850f1325ac4dfe8dbe5c5d

提到分层自动化,就会想到自动化经典的金字塔,第一层UI层针对页面系统,第二层服务层针对于业务集成,最后底层单元测试针对底层服务等。

分层自动化的特点比较如下:

  • Unit(单元/底层服务):

它可以通过mock框架,模拟各种异常场景,外部依赖最少,且可以做到测试粒度到最小的一种测试方法。也因为依赖少,可方便随时随地执行,也让问题排查很简单。这是一切测试的地基。优点是可到最小可测单元、其功能明确,特定条件、特定场景均可测,测试性价比很高,缺点是基本依赖开发同学去做,开源工具多、测试代码多,要想全覆盖,需要投入较多时间;

  • Service(接口/集成服务):

它是单元组装、功能组装、条件组装、场景组装的集合,要求测试人员对系统的结构和系统间的调度非常清楚,同时要了解接口逻辑关系,否则接口测试代码很容易遗漏一些异常场景。因此,我们需要测试人员的场景设计、构造测试数据、应用环境部署、同时也依赖接口单元的质量。同时,这一层由于含有一些业务逻辑和多接口的一个集成,所以相对单元测试来说,多了一些外界依赖,导致问题定位不会有单元测试层那么准确。因此,维护和问题排查上的投入会比单元测试多一些。

  • UI(系统/页面):

它是最常见的黑盒自动化测试场景,能覆盖的场景全面、条件全面、环境全面,最接近用户。但也因为测试范围全面,对测试人员、自动化脚本的健壮性等要求也会相对全面,需要考量场景设计能力、全面测试能力、框架选型成功、相关环境部署、业务逻辑清晰、功能测试边界、依赖底层质量。因此,只要有一环薄弱,就会大大增加自动化的失败率,而排查成本也因为环境太多太复杂而成倍增加。

以上就是分层自动化的主体三层,由此可见,分层自动化测试倡导的就是,将系统分层,根据层次特点用合适的自动化方法进行测试的一种测试策略。某个项目如何用自动化覆盖,根据项目技术特点与项目属性,设定合理的自动化测试补充与整个产品的自动化测试保障体系的结合保障。

fed22af88a5982a563511e5cf72e6368554f6620

除了分层方法与建议外,还有分层投入比,究竟花了多少时间作单测、多少时间作接口和UI?我们清楚知道,根据(N-1)M的劳力节约公式,不是所有项目都需要做自动化测试,主干核心、业务稳定、项目周期长和重复工作多的项目是需要做项目自动化测试的,图中展示了Google产品分层自动化投入比,它是比较完美的,当我们底层建设很完善的时候,上层建筑的确可以花费较少时间,维护成本也会相对降低。我们目前达不到,但可向这个比例去发展。

 

阿里分层自动化的实践

阿里巴巴分层自动化在经过策略的沉淀调整后,又经历了长期的工具与流程实践,并从自动化成本和效果这两个重要缺点上突破,进行分层自动化工具和项目流程的双重革命,最终达到业内领先的研发测试比。

首先,分层自动化工具革命

自动化测试框架,无论UI,接口还是单元,外部开源框架、收费软件等很多,各有利弊。阿里测试综合多种框架的实践,对其进行改良与创新,突破了传统自动化框架的众多难题,大大降低了自动化的成本、提升了自动化效果。如下图所示的四款重要工具,AUI主攻UI自动化,SAT主攻接口自动化,Amon主攻单元测试,以及Perf主攻性能,在传统测试框架基础的弱点上进行全面攻克与改造,最终实现鸟枪换大炮,全面提升测试工作效率。

4b1c961d0b18900ddf7d222e921441929adfe3be

1792420da37f13f65bef4b1591d96359373f5942

  • UI自动化—AUI:

4e9cfbc4f50df23867a3a2bfa192b84f2b6b369f

  • 接口自动化—SAT:

d74df6c542a4e3c1a873fa7e47559eb6600d0f71

  • 单测—Amon:

39ef89471276e798bf2bf4038735b4e2ce8edcf3

不仅如此,阿里云效还从需求-开发-测试-发布整个项目流程中可工具化、平台化的手工工作,全面进行工具化、平台化的改造,如图所示。

9ba07736b25788fd2a2dc6b7e050ae588d53cc5f

开发环节:从拉分支开始,到自测的部署环境与单元测试,全部平台工具化。一键拉分支、一键部署、一键触发单测集成,不到喝杯咖啡的时间,即可查看环境部署结果和findbugs、PMD、Sonar等代码扫描结果。

测试环节:手工测试中有用例和缺陷两款主打产品,平台沉淀,无需再做一些文件传输,加上前面介绍的分层自动化相关测试平台与工具,在自动化测试工作上的效率提升,最终实现整体测试工作的平台与工具化。

其次,项目流程革命

除了单个工具的成本减少与效果提升,云效还优化了项目流程。如下图是我们常见的项目流程,其中自动化测试工作经常只有单一自动化测试框架进行测试。

ffb3336f73c50dd2631018acb2271990fc39b95e

这样的流程,经过长期实践发现,研发测试比最多提升到3:1,是否还有改进空间呢?

我们再看这些流程,可以看到测试工作,尤其是自动化测试工作,独立于开发项目流程。这种流程带来最直接的问题就是自动化发现问题不及时,对于开发自测项目也没有很好的介入保障,同时全手工触发,人为因素影响非常大,这是限制开发测试比大幅提升的重要原因。

假设我们的项目在合理运用分层自动化的测试策略后,并将其触发-问题排查-结果反馈都平台化地纳入到整个需求-开发-测试-发布这个项目流程中,会产生什么样的效果呢?

78889e73b6abef00d61a95f4f19a7a8a878aa0ba

图为阿里项目分层自动化持续集成完整示意图,我们多了集成自动化平台,该平台可以把分层自动化工具串联在一起,去做整个持续集成、持续交付操作,让工具具备了平台能力。不仅如此,我们还将分层自动化测试纳入到了拟发布流程中,开发同学提交环境部署后,会自动提交自动化测试,不需要测试同学介入,如果失败了才会通知测试人员排查,完全做到了CI/CD的理想效果。

bbbb45903b088de9aab3997d6546833436457eff

项目集成可以使用,那么日常的产品回归也可以用,图为阿里产品分层自动化持续集成完整示意图,集成自动化给日常回归产品做了赋能,将分层自动化工具平台和集成自动化串联,去保证日常产品质量的回归。

通过流程优化,在各个方面都得到了很大益处:

  • 阿里内部:大幅提高研发测试比,减少重复劳动带来的加班,更多高效工具的诞生
  • 研发:单测成本降低,覆盖率可视化,自测有保障,故障降低
  • 测试:测试要求降低,重复工作减少,增加工作成就感,各种工具诞生
  • 云效客户:企业快速赋能,提高研发测试效率,快速掌握阿里内部高效测试流程

使用这套体系,B2B研发测试配比达到了8:1,部分产品线13:1,却全年无故障。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
相关文章
|
5天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
4天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
5天前
|
Java 测试技术 持续交付
探索自动化测试在软件开发中的关键作用与实践
在现代软件开发流程中,自动化测试已成为提升产品质量、加速交付速度的不可或缺的一环。本文深入探讨了自动化测试的重要性,分析了其在不同阶段的应用价值,并结合实际案例阐述了如何有效实施自动化测试策略,以期为读者提供一套可操作的实践指南。
|
5天前
|
Web App开发 敏捷开发 测试技术
探索自动化测试的奥秘:从理论到实践
【10月更文挑战第39天】在软件质量保障的战场上,自动化测试是提升效率和准确性的利器。本文将深入浅出地介绍自动化测试的基本概念、必要性以及如何实施自动化测试。我们将通过一个实际案例,展示如何利用流行的自动化测试工具Selenium进行网页测试,并分享一些实用的技巧和最佳实践。无论你是新手还是有经验的测试工程师,这篇文章都将为你提供宝贵的知识,帮助你在自动化测试的道路上更进一步。
|
5天前
|
敏捷开发 Java 测试技术
探索自动化测试:从理论到实践
【10月更文挑战第39天】在软件开发的海洋中,自动化测试是一艘能够带领团队高效航行的船只。本文将作为你的航海图,指引你理解自动化测试的核心概念,并分享一段实际的代码旅程,让你领略自动化测试的魅力和力量。准备好了吗?让我们启航!
|
5天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
6天前
|
数据采集 IDE 测试技术
Python实现自动化办公:从基础到实践###
【10月更文挑战第21天】 本文将探讨如何利用Python编程语言实现自动化办公,从基础概念到实际操作,涵盖常用库、脚本编写技巧及实战案例。通过本文,读者将掌握使用Python提升工作效率的方法,减少重复性劳动,提高工作质量。 ###
20 1
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
65 4
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
15天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
41 4