如何做好自动化测试,揭秘阿里巴巴分层自动化实践之路

简介: 自动化测试可以给工作提效,减少重复劳动,但在实践过程中,却总是碰到各种问题,导致进入自动化测试盲区。如何做好自动化测试,是很多企业迫切想要解决的问题。阿里巴巴旗下一站式研发提效平台——云效,于12月8日16:00开启《阿里巴巴持续集成持续交付之分层自动化》直播分享,将为企业提供自动化测试解决方案。

自动化测试是软件测试技术上的一大进步,我们都知道自动化测试可以给工作提效,减少重复劳动,但在实践过程中,却总是碰到各种各样的问题,导致进入自动化测试盲区。如何做好自动化测试,是很多企业迫切想要解决的问题。阿里巴巴旗下一站式研发提效平台——云效,将于12月8日16:00开启《阿里巴巴持续集成持续交付之分层自动化》直播分享,为企业提供自动化测试解决方案。今天我们先来看看阿里巴巴嘉宾的部分解读。


嘉宾介绍:金桐:阿里巴巴B2B事业群高级产品经理。从事多年互联网系统的研发和测试工作。现在主要负责云效分层自动化测试的产品设计。





自动化测试


所谓自动化测试,就是用程序模拟用户手工操作的一种测试方法,能够帮助测试人员从重复、枯燥的手工测试中解放出来。但在自动化实践过程中,测试人员往往发现理想和现实之间差距很大。

edd00bc33e62c67964622995801eed29fc0c9a28


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


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


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

 

f99554b18e02db8750e568558f7dbbdeba2dc6d1

成本:


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


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


效果:


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


覆盖率:


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


及时性:


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


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

 

分层自动化的理念是什么?


在理解分层自动化之前,我们先看自动化测试金字塔。自动化测试金字塔在测试领域耳熟能详,其中UI代表页面级系统测试,service代表服务业务测试(接口测试),unit代表单元测试。金字塔越高,表示需要投入的精力和工作量越大。

f54a3520c22539c32d47f8b90855fc4f255135e5

 

单元测试(unit):它可以通过mock框架,模拟各种异常场景,外部依赖最少,且可以做到测试粒度到最小的一种测试方法。也因为依赖少,可方便随时随地执行,也让问题排查很简单。这是一切测试的地基。


接口测试(service):这里要求测试人员对系统的结构和系统间的调度非常清楚,同时要了解接口逻辑关系,否则接口测试代码很容易遗漏一些异常场景。这一层由于含有一些业务逻辑和多接口的一个集成,所以相对单元测试来说,多了一些外界依赖,导致问题定位不会有单元测试层那么准确。因此投入会比单元测试多一些。


页面测试(UI):是常见的黑盒自动化测试场景。它最接近用户真实场景,也容易发现问题,但它的实现成本最高且太容易受外部依赖,影响脚本成功率,所以处在金字塔的顶端,但它不是金字塔的全部。自动化测试的劣势,其中80%都是因为UI自动化。


以上就是分层自动化的主体三层,由此可见,分层自动化测试倡导的就是,将系统分层,不同层次用合适的自动化方法进行测试的一种测试策略。某个项目是否都能用自动化覆盖,那就要看测试负责人的分层策略是否合理、全面。


通过实践发现,如果只是简单使用分层自动化测试,研发测试比最多提升到4:1,那么阿里巴巴研发测试比平均8:1,这是怎么实现的呢?


阿里巴巴分层自动化实践


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


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


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


   c543e64c6fc8d8c3c76b3e569588bb301f4cde82


43d05a41462eb5689f7693198803943ebb8ec82b


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


b2ad1e5822ca1b1188eb675c479b78df3dcee643

 

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


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


其次,项目流程革命


除了单个工具的成本减少与效果提升,云效还优化了项目流程。

如下图是我们常见的项目流程,其中自动化测试工作经常只有单一自动化测试框架进行测试。


b4a7b2486adf56f1764e0220256f0646cc01bf61

 

通过前文的分析,分层自动化才能全面覆盖我们整个项目功能,因此,我们将流程改为如下图所示流程。

 

99578cc2f0fca9aca3ea12fa7c0516b9edf3a5c1


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


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


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


将自动化的结果反馈变成了发布的必要环节,每一项自动化测试结果都变成发布环节的重要开发,又会产生什么样的效果?


我们的自动化测试,只能用于测试介入的项目测试么,只能用于测试介入的发布么?我们是否还能用做日常业务保障?是否可以在项目中的bug出现初期就发现问题呢? 

无论是测试工具革命还是测试流程改进,都留给我们很多疑问,正是这些疑问,让自动化测试一直都是一把双刃剑,用的好可以大幅提升效率,降低成本投入,用不好则可能成为测试鸡肋,妨碍测试进程。所以学习如何进行自动化测试,如何把握分层自动化的分层策略,如何将分层自动化融入到项目流程中,是企业必须掌握的测试技巧。现在可以报名参加阿里云效12月8日(周四)16:00的《阿里巴巴持续集成持续交付之分层自动化》直播分享,内容更全、更干。名额有限,机不可失!


报名方式:

 8a460c5c023c0792eeab5679e55f32cb078fb295

扫描识别图中二维码进行报名




直播详情


直播主题:阿里巴巴持续集成持续交付之分层自动化

直播提纲:

●为什么要进行自动化测试?为什么理想中的自动化与实践有差距?

●分层自动化是什么?如何正确理解自动化测试金字塔?

●总结分层自动化的分层策略,提供实施方案;

●在线开展分层实践活动;

●阿里巴巴分层自动化的实践:分层工具的革命+项目流程的革命


温馨提示:报名成功后,可以加入云效QQ群:435558264 优先获得直播登陆链接和密码。

    



关于云效:

云效,创立于2012年,由阿里巴巴出品,是业内领先的面向企业的一站式研发提效平台,涵盖单测、接口、UI、前端、性能、集成自动化等分层自动化测试,通过项目流程管理和专项自动化提效工具,能够很好地支持互联网敏捷项目的快速迭代发布,真正实现24小时持续集成、持续交付。


官网地址:http://yunxiao.aliyun.com/
相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
相关文章
|
1天前
|
消息中间件 运维 Kubernetes
构建高效自动化运维体系:Ansible与Kubernetes的融合实践
【5月更文挑战第9天】随着云计算和微服务架构的普及,自动化运维成为确保系统可靠性和效率的关键。本文将深入探讨如何通过Ansible和Kubernetes的集成,构建一个强大的自动化运维体系。我们将分析Ansible的配置管理功能以及Kubernetes容器编排的优势,并展示如何将二者结合,以实现持续部署、快速扩展和高效管理现代云原生应用。文章还将涵盖实际案例,帮助读者理解在真实环境下如何利用这些工具优化运维流程。
|
2天前
|
算法 测试技术 开发者
测试驱动开发(TDD)实战:从理论到实践
【5月更文挑战第8天】TDD实战指南:先测试后开发,确保代码质量与可维护性。核心思想是编写测试用例→实现代码→验证→重构。优点包括提高代码质量、促进设计思考和增强可测试性。实战步骤包括编写独立、明确的测试用例,遵循最小可用原则编写代码,运行测试并分析失败原因,以及在验证通过后进行代码重构与优化。通过TDD,开发者能提升编程技能和项目成功率。
|
2天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Ansible的策略与实践
【5月更文挑战第8天】 在当今IT基础设施管理领域,自动化不再是一个选择,而是必要的步骤。随着复杂性的增加和变更的频繁性,自动化工具如Ansible提供了一种高效、可靠的解决方案来简化配置管理和多节点部署。本文将探讨如何利用Ansible构建一个高效的自动化运维体系,涵盖其核心原理、策略设计以及在实际环境中的应用。我们将分析Ansible与其他自动化工具的不同之处,并提供一些最佳实践,以帮助运维专家提升他们的工作效率和系统稳定性。
|
3天前
|
Java 测试技术 Maven
5个编写技巧,有效提高单元测试实践
本文作者详细讲解了关于单元测试的相关知识,做好单元测试能有效地保障代码质量,本文将手把手教你学会应用单元测试并附有案例、测试插件。
|
3天前
|
Java 测试技术 开发者
卓越工程之单元测试在行权鉴权中的实践
这篇文章着重在“实践”上,是对Java编程技巧之单元测试用例编写流程这篇文章的实际应用,并没有高深的理论和技术。
40 10
|
3天前
|
JSON 前端开发 JavaScript
快照测试在前端自动化测试中的应用
在前端自动化测试中,快照测试常用于检验组件渲染与布局。
|
4天前
|
测试技术 API
探索软件测试中的自动化工具与挑战
本文探讨了软件测试领域中自动化工具的应用与挑战。通过分析目前主流的自动化测试工具,探讨了其在提高测试效率、减少人工成本、增强测试覆盖率等方面的优势。然而,自动化测试也面临着诸如脆弱性、维护成本高等挑战。最后,提出了一些应对挑战的建议,以期为软件测试领域的自动化工作提供一些启示。
11 1
|
4天前
|
Web App开发 JSON 前端开发
我理解的测试开发与实践总结——新人篇
本文以作者的视角,讲述了测试与开发、产品之间的关系,如何做好一个测试以及做好一个测试应当具有的素质与技能。
|
4天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器化技术融合实践
【5月更文挑战第6天】随着企业IT架构的复杂化以及快速迭代的市场需求,传统的运维模式已难以满足高效率和高质量的交付标准。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系,旨在实现持续集成、持续部署和自动化管理,提升系统的可靠性、可维护性和敏捷性。
|
4天前
|
机器学习/深度学习 数据采集 敏捷开发
探索软件测试中的AI驱动自动化:未来趋势
【5月更文挑战第6天】 随着人工智能(AI)技术的不断进步,其在软件测试领域的应用正变得日益重要。本文将探讨AI如何革新现有的软件测试流程,并预测其对未来测试实践的影响。我们将深入分析AI在测试用例生成、缺陷预测以及测试执行等方面的应用,并讨论实现这些技术的挑战和潜在好处。文章的目标是为读者提供一个清晰的视图,展示AI如何增强测试效率和有效性,同时指出实施过程中需要注意的关键因素。