什么是测试自动化
近年来,随着敏捷开发模式的流行,测试领域也在不断地发生变化。由于敏捷开发所谓“小步快跑”的方式迫使测试人员需要在更短的时间完成整个测试过程,而以前的纯手工测试应付这种“短平快”的开发节奏渐渐变得吃力起来,于是提升测试的速度和效率则变成了能否很好支撑敏捷开发的关键。而提升测试速度和效率,自动化就变得比以前任何时候更显得重要了。
那么什么是自动化测试?什么是测试自动化?相信很多人都认为这两个概念说的是同一个意思。但是从笔者看来,这俩个概念却是有本质上的区别。所谓“自动化测试”,一般是指在测试执行过程中,通过自动化的工具或手段来代替人工执行的过程。它强调的阶段是解决“测试执行过程”的效率;而“测试自动化”,是指在测试领域中的任何方面都可以通过各种自动化的方式和手段来加快测试的效率,保证测试的质量,缩短软件交付的周期。所以它强调的阶段是整个测试的过程而不仅仅是执行过程。比如说测试数据准备的自动化、测试环境搭建的自动化都可以包含在测试自动化中。从这个角度来说,测试自动化所包括的范围更广,而我们在项目中,更应该从自动化测试思维转变到测试自动化思维中,从整个测试生命周期(STLC)中去寻找可以自动化的点,全方位的提升测试的效率。
测试自动化的目的
测试自动化的目的,很多人第一反应就是加快测试的速度。诚然,加快测试速度是其中的一个目的。但是笔者认为,测试自动化最核心的目的是保证软件的质量。大家知道我们在做测试时,无论是版本升级还是缺陷修复都需要大量的回归测试。而如果仅仅只是靠“人肉”战术,一方面要测新功能,一方面又要测回归,往往这时候测试人员会把重点放在新功能上面,而回归测试就会因为时间紧被简化了,从而导致有些缺陷被遗漏掉;另外因为人毕竟不是机器,在经过重复枯燥的点鼠标测试工作后,往往会有“审丑”疲劳,而软件的“丑”有时就被熟视无睹了。所以如果通过自动化,则可以弥补这方面的问题,从而提升整个软件质量。
当然,第二个目的就是大家所熟知的加快测试速度了。但是这里笔者需要阐明一点的就是加快测试速度不是指加快脚本执行步骤的速度。其实从某种意义上来说,可能熟练的测试工程师对某一个业务流程的操作有可能比机器操作还要快(机器为了脚本健壮性,往往会设置很多等待时间,避免操作比系统反应更快从而导致脚本运行失败)。这里说的加快测试速度是指机器可以24小时不间断的运行,当然也可以利用晚上时间运行,而这个是人所没办法做到的。所以从这个角度上来说是加快了整个测试的速度。
其实还有一个目的是大家容易忽视的,也就是自动化可以解决人工不能做到的一些测试操作。比如说性能测试,如果需要测10000个并发,我们是不可能找10000个测试工程师坐在电脑前同一时间去点击系统的。即使能找到10000个工程师,但是怎么保证他们真的是“同一时间”呢?通过自动化,却是可以通过模拟这种并发的请求来实现。
分层测试自动化
业界有张很出名的图,说的是分层自动化测试,如下图:
但是如果从上面阐述的内容去理解,笔者觉得这张图有所缺失。分层测试自动化(为了区别,笔者不用“分层自动化测试”)不仅仅只是关注执行过程,而应该还需要关注包括数据、环境准备等各个方面。测试自动化也不仅仅是UI的自动化,而是需要在测试的不同阶段都考虑自动化。再结合测试“左移”的理念,把大部分的测试工作下沉到单元和集成测试阶段中。因此笔者对该图进行了优化,补充了最下层的测试数据及测试环境自动化,详细见下图:
笔者想特别强调的就是测试环境的自动化。大家知道测试环境准备特别耗时,有统计数据表明,测试环境的准备时间占整个测试过程的40%。所以通过自动化来解决测试环境将会大大提升整个测试的效率。笔者在2015年曾经在某银行做过测试云的POC。当时的目标就是一键生成包括OS、中间件、数据库和应用在内的整个测试环境。POC选择的应用是银行柜台程序,中间件是WAS,数据库是DB2,操作系统是AIX,服务器是Power。当时整个解决方案是通过IBM的私有云(因为Power AIX的虚拟化能做的公司不多) UrbanCode(IBM收购的自动化应用部署软件)。其中云平台负责OS、中间件和数据库安装;而UrbanCode负责中间件、数据库配置以及应用的安装部署。而整个测试环境的准备时间从以前需要几天的时间减少到半个小时内完成!
什么项目适合测试自动化
到底什么样的项目适合测试自动化?相信很多人都会认为,不是所有的项目都适合自动化测试。根据某咨询公司的调查分析,一个自动化测试脚本只有被执行超过5次,它的ROI才能被接受。所以对于一些千年没有变更的“僵尸”应用是没必要自动化的;另外如果某应用的UI经常变来变去从而造成脚本维护成本非常高,它的ROI也不一定被接受。这些确实是影响或者阻碍自动化的一些因素。但是如果从“测试自动化”的角度来分析,我们是否可以在测试数据上做自动化呢?是否可以用更快速的方法搭建测试环境呢?UI经常变,那是否能做API的自动化测试呢?...所以笔者的观点是我们需要有“自动化”的意识,把“自动化”植入到脑袋里。日常工作任何能帮助你减少重复劳动、提升工作效率的方面都可以尝试用“自动化”去帮忙解决,而不是紧紧狭义的理解“测试自动化”就是“UI的测试自动化”。从这个角度上来看,所有的项目都可以进行“测试自动化”了。