1、前言
自动化测试作为测试实施的必要手段,在各个行业测试中发挥着重要的作用。那么,评价一个自动化测试做的好还是不好的标准是什么?我们以前可能会用自动化测试框架的设计,自动化测试成本投入、自动化测试开发效率来衡量。作者在多年的自动化测试实施过程中,经过总结发现,我们应该更多关注的自动化测试的被使用率,因为即使你的框架设计的再好,脚本写的非常完美,如果没有项目使用,那么就相当于我们只有投入,但是看不到我们想要的期望结果。所以,自动化测试项目做的好坏,应该用使用率来衡量,那么如何提升自动化测试使用率?现在,我们希望能够借鉴DevOps的理念来推广自动化测试的实施,让更多的组织、团队感受到自动化测试的效率提升,同时做到低成本投入。下面从三个方面来介绍:DevOps简介、DevOps三大原则、如何使用DevOps的理念推广自动化测试。
2、DevOps简介
DevOps由开发(development)和运维(operations)两个单词组成,其本意就是鼓励不同的软件开发部分共同协作,开发、测试、运维。用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。
3、DevOps三大原则
①基础设施即代码(InfrastructureasCode):DeveOps的基础是将重复的事情使用自动化脚本或软件来实现,例如Docker(容器化)、Jenkins(持续集成)、Puppet(基础架构构建)、Vagrant(虚拟化平台)等。
②持续交付(ContinuousDelivery):持续交付是在生产环境发布可靠的软件并交付给用户使用。而持续部署则不一定交付给用户使用。
③协同工作(CultureofCollaboration):开发者和运维人员必须定期进行密切的合作。开发应该把运维角色理解成软件的另一个用户群体。协作有几个的建议:1、自动化(减少不必要的协作);2、小范围(每次修改的内容不宜过多,减少发布的风险);3、统一信息集散地(如wiki,让双方能够共享信息);4、标准化协作工具(比如jenkins)
4、自动化测试与DevOps
从以上可以看到,DevOps的理念就是充分利用资源,做到资源使用最大化,那么自动化测试如何借鉴DevOps的先进理念,让自动化测试实施也达到这个效果?我们首先分析一个自动化测试应用的阶段以及应用的组织或部门,如下面两图所示,不同的部分对应不同的测试阶段,但是这些测试阶段都有两个共同点:黑盒测试、功能测试;这些阶段都在一定程度上满足自动化测试的前提条件,都比较适合开展自动化测试。所以,对于自动化测试实施的问题随之而来,不管哪个测试阶段,我们测试的对象都是同一个被测试系统,只不过不同的测试阶段关注点是不一样的;但是,测试执行的对象以及操作时一样的。所以,不同的测试阶段,不同的组织,团体,对于一个项目,如果都实施自动化测试,那么从自动化测试投入来看,是一样的,无外乎脚本的写法,大同小异。但是资源的投入站在整个项目来看,是反复的投入,是冗余的投入。
一、如何解决上述问题?如何避免资源的冗余投入?
根据DevOps的理念,我们对自动化测试实施的想法是:“脚本共享、资源共享”。
二、目标已经明确,那么我们该怎么做?
如何做到脚本共享、资源共享?作者认为至少应该达成以下目标:
1.自动化测试策略不再基于一个项目,或者一个组织、团体,而应该基于项目相关联群体的所有测试需求。如开发组的测试需求是什么?测试组的测试需求又是什么?运维组的测试需求与二者有何区别?我们先梳理清楚。然后有针对性的完善自动化测试策略,设计自动化测试框架,以便能够同时满足不同组织、团队对自动化测试需要,一次投入,共同受益。
2.对于自动化测试资源,如环境部署、执行机器申请等相关资源或行为,需要建立统一的安排和筹划,这种构想有点类似云服务,对资源进行集中管理,统一分配,不论是开发组、测试组还是运维组,提供统一的申请入口,最大化的合理配置资源,避免资源浪费。从而能够让公司的资产使用更高效,降低反复投入、冗余投入。
这样,通过以上两点,我们满足了不同的组织对于同一项目的不同测试需求,对资源的需求也做到了最大化使用;并且按照这种模式,自动化测试的后期维护成本也会大幅度的降低。因为我们只需要维护一套脚本,不需要维护多套脚本。最终,自动化测试脚本的使用率能够做大最大化,一次开发,多个组织、团队同时使用,各种资源的利用率也会达到最大化。
那么,如何实现以上目标?请看下图。在这里,我们引入了一个新的工具Ansible,这是一个开源的自动化运维工具。通过Ansible作为中间件,我们把各个组织、团队对自动化测试的需求与测试资源进行了关联,每个团队成员都可以通过WEB方式,对自动化测试脚本、执行资源以及测试环境进行申请和管理,好处如下:
1.在这个实施模式中,开发、测试、运维只需要一个组织完成脚本开发,其他组可以共享使用,从而自动化测试脚本的使用率能够得到保证,自动化测试开发成本降到最低
2.开发、测试、运维不再需要各自申请资源,能够充分利用项目内的所有资源
3.真正做到在自动化测试方面,彻底打通了组织间的壁垒,彻底挖掘了自动化测试脚本的作用,做到最大使用率。
以上,就是作者基于多年的自动化测试经验从实施角度对自动化测试的一种想法,因为在过去的职业生涯中,遇到了很多自动化测试项目失败,原因无外乎几点:项目成本投入过大、脚本开发出来了,但是看不到预期效果、资源配置不足,导致不能充分发挥自动化测试的作用,这些问题,都可以通过以上所述解决。通过这篇文章,我们希望能够和行业同事一起分享我们在自动化测试方面的探索及经验,也希望能够与更多的同仁一起对自动化测试进行深入的讨论。谢谢!