1.1 自动化金字塔
自动化金字塔,全称为自动化测试金字塔(Test Automation Pyramid),是一种自动化测试过程的金字塔形策略结构。
在软件产品的测试上,为了能够达到高效率、高质量、反馈性好、解放人力的效果,需要引入自动化测试技术。为了对自动化测试的测试层次提供引导方向,人们总结出了自动化金字塔结构的测试层次。
自动化金字塔最初是在2009年由Mike Cohn在2009年的著作Succeeding with Agile: Software Development using Scrum (《Scrum敏捷软件开发》)中提出的。,在这本书中,自动化测试金字塔被定义为一种三层的金字塔形结构,如下图所示:
在最初的三层金字塔中,最下层是单元测试,单元测试是自动化测试策略稳固的根基,因此也是金字塔结构的最底层;最上层是用户界面,通常用户界面是脆弱的,测试和修改的经济成本和时间成本较高;中间服务层是为了过渡用户界面和程序单元而设计的,认为所有应用程序都由各种服务组成。通过对服务进行测试,而不是对用户界面进行测试,可以极大缩短时间和成本。
后来在Lisa Grispin的Agile Testing(《敏捷测试》)一书中,对自动化金字塔原始的三层结构进行了补充,增加了手工测试的“帽子”结构,如下图所示:
通过对自动化测试金字塔结构的了解,我们应该明白如下几个道理:
①越下层投入越多,这是金字塔结构主要提出的观点,认为单元测试的稳定性和投入保证了产品质量;
②越下层效率会越高,因为软件的漏洞最终是落在具体的程序代码上的,所以底层的测试效率是最容易发现和修改错误(BUG)的;
③越下层成本会越低,因为低层代码测试进行的越早,此时发现错误修改起来较为容易,牵连的其他内容也很少,越向上再发现问题往往需要修改的代码量会成倍增多,所以说下层测试和修改的各项成本都是相对低的;
④越下层实现专业性要求越高,虽然底层的直接修改是容易的,但是这是基于拥有一个经验丰富的程序员或测试员的前提下,高度的专业性意味着人才的需求和人力成本的提高。
基于自动化金字塔结构的理解,服务层的接口测试可以以较小的工作量及成本满足团队的自动化测试需求。
1.2 什么是接口测试
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
现在我们使用的较多的是基于HTTP协议为基础的接口及RPC的Dubbo接口,但不管是哪种接口,其本质就是发送一个Request报文给服务器,然后服务器响应返回一个Response报文。
我们对Response的报文进行分析,判断是否和我们发给服务器的Request对应的返回相同,从而验证业务是否正确实现,这即是接口测试。
1.3 为什么要做接口测试
随着系统越来越多,以及复杂性越来越高,为了保证系统的独立性,也为了使业务更加的独立,系统间的交互越来越多的使用接口(高内聚低耦合)。这时候对于传统测试人员需要等到系统集成后才能进行测试,不但很难确保测试的覆盖率,效率也非常低下,为了解决这两个问题,接口测试也应运而生了。
首先,随着系统复杂程度的上升,传统的测试方法测试成本急剧增加,测试效率大幅下降。相反接口测试能够提供系统复杂度上升情况下的低成本高效率的解决方案。
其次接口测试不同于传统开发的单元测试,接口测试是站在用户的角度对系统接口进行全面高效持续的检测。
再次UI的错误相对来说是比较容易修正的,但是数据的错误(业务的错误)所带来的危害就大得多了,所以为了持续性的检查接口数据的准确性,通过在早期进行接口自动化测试,可以很好的发现定位问题。
最后接口测试是自动化并且持续集成的,这也是为什么接口测试能够低成本高收益的根源。
总之接口测试是保证高复杂性系统质量的内在要求和低成本的经济利益的驱动作用下的最佳解决方案,接口测试是一个完整的体系。
1.4 接口测试的适用范围
在前面我们提到,接口是系统与系统间或者模块与模块间的交互,任何数据都是有其意义的,如果在传输过程中丢失了或者发送了错误的数据,就会导致意外或者业务逻辑处理机制,进一步发现存在的问题,并且为此付出很大的代价。
接口测试适用于为其他系统提供服务的底层框架系统和中心服务系统,主要测试这些系统对外部提供的接口,验证其正确性和稳定性。接口测试同样适用于一个上层系统中的服务层接口,越往上层,其测试的难度越大。
接口测试实施在多系统多平台的构架下,有着极为高效的成本收益比。接口测试天生为高复杂性的平台带来高效的缺陷检测和质量监督能力。平台越复杂,系统越庞大,接口测试的效果越明显。
所以任何接口都是应该经过测试,即有交互的地方,我们就要进行接口测试。首先要达到100%的接口覆盖率,在有条件的情况下做到进一步的100%需求对接口的映射及100%的接口对代码的逻辑覆盖率。
1.5 接口测试的目的和方式
接口测试的核心战略在于保证系统的正确、稳定运行为核心,以持续集成为手段,提高测试效率,保证数据的准确性,降低产品研发成本。
1)核心:保证系统接口的功能正确、稳定运行
质量管理的目标是保证系统的正确和稳定,接口测试作为软件质量管理的一部分也是保证系统的正确和稳定的,更准确的是保证系统服务端的正确和稳定,一个系统的服务端,越接近底层,对系统的影响就越大,甚至有可能牵一发而动全身,服务端的一个缺陷可能会引起客户端的几个甚至十几个缺陷,更可怕的是服务端的缺陷有可能引起系统的崩溃,这对整个系统来说,损失将是不可估量的,因此服务端接口的质量将直接影响到系统的正确和稳定。
2)方式:持续集成
什么是以持续集成为手段, 关键在于“持续构建”、“业务”、“集成化” 以及“文档体系”,我们需要让被测代码进行持续构建集成, 我们需要用业务化的思维去考虑接口定义的合理性,我们需要从性能、安全的角度去思考代码的正确性,我们还需要从集成化的角度去甄别接口间数据传递的正确性,我们更需要确定我们的测试范围,也就是我们测什么、不测什么。
3)目的:提高测试效率,保证数据的准确性,降低产品研发成本 接口测试要为代码的编写保驾护航, 增强开发人员和测试人员的自信, 让隐含的BUG 提前暴露出来,要让开发人员在第一时间修复BUG,要让功能测试人员和性能测试人员在测试的时候更加顺手, 最大限度得减少底层BUG 的出现数量, 要让产品研发的流程更加敏捷,要缩短产品的研发周期,最后在产品上线以后,要让用户用得更加顺畅,要让用户感觉产品服务零缺陷。 4)文档:接口测试对接口定义文档要求很高,所有的接口数据类型及业务分支导致的报文返回结构是需要事先定义好的,所以要形成文档的习惯,以方便查阅,尽量减少团队与团队间的沟通成本。 同样我们在接口测试中,也需要根据文档,整理出我们的接口测试数据及接口测试案例,有效的生成相关测试报告,方便其它人去审核、分析接口测试的成果。