基于Serverless的测试服务化-理论篇
介绍
随着自动化测试方法和技术的快速发展,自动化测试的的直接开发难度越来越小,但是由于其规模越来越大,测试类型和测试基础设施也越来越多,导致整体开发和实施自动化测试的复杂度是在逐渐增加的。对于大型项目,相对大量不同类型的测试和测试基础设施,专注于测试分析和测试设计,并根据测试策略和计划实施测试工作,包括测试分层,测试赋能,测试前移,开发自动化测试等,这些才是主要也更为重要的工作。由于很多公司的测试资源都是相对较少的,所以让有限的测试资源能尽可能全部的投入到这些重要的工作里面,则可以得到更多更有效的测试用例和测试结果,更好的体现测试的价值。比如TDD这样的技术,就可以使用更多更有效的测试用例去帮助团队编写出质量更高的软件,从而将软件质量内建在软件开发流程中。为了实现这样的目标,则需要测试服务化,并且使用Serverless的架构设计来实现测试服务化会是一种更为高效的方法。
基于Serverless的测试服务化可以带来以下优势:
- 资源隔离,各种基础设施,包括硬件,OS,测试框架等
- 工程简化,只需编写测试用例代码和配置代码
- 资源复用,复用测试服务和测试步骤库
- 可编程化,根据不同的需求,可以使用不同测试服务进行定制化组装
测试服务化介绍
首先来介绍一下测试服务化。测试服务化其实就是对于各种测试需求,通过服务(Service)的方式对外提供各种测试能力,从而满足各种测试需求。常见的测试服务包括测试用例服务,提供测试用例的生成,管理,分析等能力;测试数据服务,提供测试数据分析,生成,构建等能力;测试工具/框架服务,提供测试工具/框架安装,配置,管理等能力;而测试设施服务,提供构建,配置和管理测试基础环境的能力;而测试执行服务,提供测试资源的整合管理,配置和执行的服务。除此外还有其他的一些测试服务,比如测试日志服务,测试结果服务等等。传统的一些测试工具或者系统也是提供一些类似的能力,但是它们更多的是针对手动测试的一些管理功能,并不是一个统一的,系统化的,并且可以通服务接口来提供测试能力的。由于现在测试类型的多样性和复杂性,简单的Web UI已经很难满足各种不同类型的测试需求了,而需要Web API或者Native SDK等多种接口才能满足,因此测试服务化需要提供这样的能力。
测试服务化的一个示例图:
Serverless架构介绍
测试服务所提供的能力可以通过不同的方式提供,比如SaaS,PaaS,Serverless等,但是其中Serverless是当前所有架构中,对于测试服务化更为合理的。因为Serverless即有SaaS的优势,即资源隔离、工程简化,又有PaaS的优势,即资源复用,可编程化等。资源隔离和工程简化,是指对于使用Serverless能力的人不用关心各种资源的配置,构建等细节管理工作,只需要关心使用什么样的服务能力,只需要知道怎么使用,然后简单的直接使用就可以,从而可以节约大量的工程时间。其次资源复用和可编程化,是指可以通过编程的方式定制化和复用Serverless提供的各种服务能力,从而实现各种不同的测试业务需求。
服务架构的比较图::
基于Serverless的测试服务化
当测试服务化遇到Serverless架构,则可以有效的隔离测试服务的细节,比如测试基础设施,测试数据环境等;可以有效的简化测试工程,比如测试工具的搭建,测试环境的配置,测试数据的生成以及测试结果的分析等各种具体的工作;并且还可以通过各种服务接口提供可定制化,可编程化的能力给使用测试服务使用方,让其可以通过编程等方式将各种测试能力组合起来,并定制化为自己需要的系统化测试能力。
基于Serverless的测试服务化示例图:
虽然基于Serverless的测试服务化具有这么多优势,但是这些优势仅仅是对于服务使用方,而其复杂度是其本身的设计和实现。Serverless架构中,最为常用的就是容器技术,而容器技术不仅是自动伸缩技术的基础,也是自动化测试框架/工具的天然沙盒,从而可以高效的隔离和管理包含不同测试框架/工具的执行环境。其次,由于测试的大规模化,需要大量的测试资源,比如测试运行环境,测试数据服务等等,则需要通过Server/Worker的方式来设计架构,从而实现对于资源的动态扩展。服务接口方面,最为实用并简单的接口则是Web API中的RESTFul API。通过这样的Web API,可以有效的对测试服务提供的测试能力进行编程和定制化。最后由于测试服务的多样化和可定制化,则需要提供一个强大插件系统,使得不同的测试服务可以互相隔离并且分别定制化。为了满足这些需求,则需要一个测试的技术架构,如下:
技术架构图:
上面是一个高层的技术架构设计图,通过它可以见到介于Serverless的测试服务化的全貌。对于其中比较重要的自动化测试,下图是一个自动化测试在基于Serverless的测试服务化系统中的工作流程示意图。其中通过对于三个服务能力的使用,可以让同一套流程实现各种不同类型的自动化测试。并且通过对于这三个服务能力的编程,还可以实现各种不同测试业务需求的自动化能力。
自动化测试工作流程图:
总结
随着软件系统规模的增加,质量需求的提高,一定会导致测试类型的增多和测试规模的增加,而测试服务化是当前解决这些问题最好的解决方案,而Serverless则是当前实施测试服务化的最好的架构方案,因此基于Serverless的测试服务化孕育而生。但是随着测试服务化的建设,面对大规模的测试服务,如果需要有效的管理和使用它们,则需要一个系统化,可定制化,高度复用的测试平台,即测试中台。