企业通过DevOps体系落地,建立相关的DevOps工具及流程规范,实现CICD过程自动化。在整个CICD过程中,测试是其重要组成一环,由于测试的方式较多,在传统的测试设计里面,尚未有哪家测试工具实现了所有测试方式的全覆盖,而今天基于DevOps平台的自动化驱动与扩展能力,可以实现测试服务的一体化设计。通过一体化测试的应用,可带来明显的应用质量提升与效能提升,实现测试领域质量管理工作由被动向主动的转变。
随着研发过程的加速以及应用可靠性与安全性要求的不断提高,测试业务的关注范围也在持续演变中,测试业务的定位以及演变情况如下图所示:
由上图可以看出,测试过程属于应用研发所涵盖的业务、开发、测试、运维的核心过程之一。根据测试自身的业务活动范围,其可分为两个大的阶段:
一是基于软件包的测试为主的阶段,主要活动包括获取软件包、部署软件包、测试软件包以及发布软件包。
二是在原有的活动中,向左扩展了针对源代码的获取、编译构建以及源代码级别的测试检测。后续,随着业务在线可靠性检测的要求提升,测试还将向生产过程扩展,生产过程的测试也必将常态化,如全链路压测。
测试内容可按照业务和方式两个维度进行划分,分别如下:
1.按业务分类
功能测试:主要进行应用的功能检测,包括单元测试,接口测试、UI测试、移动端测试等。
性能测试:主要进行应用负载能力检测,包括传统的单点压测,以及当前流行的全链路压测。
安全测试:主要从源代码以及制品两个层面进行检测,常见的有SAST、DAST,以及当前流行的IAST。
2.按方式分类
人工方式:以人工的方式开展测试工作,主要包括功能测试中的人工方式以及安全测试中的人工渗透测试等。
自动方式:以工具自动化的方式进行测试,测试之前要进行测试用例的开发准备或配置。
3. 测试配套服务
为了能够开展测试或尽量贴近真实环境进行测试,测试一般还会包括测试配套服务建设,分别为Mock和数据工厂。
Mock:用于提供测试中Api接口的模拟,以实现未有实现功能或第三方系统Api的模拟,用于完成测试所需依赖Api环境的准备。
数据工厂:用于进行测试数据的准备,包括真实数据的脱敏以及按结构、规则生成测试数据等,用于完成测试所需数据的准备。
由于测试业务本身的专业性较强,当前未有哪一款测试工具可以涵盖上述的测试内容全面支持,而正是因为如此,可以通过DevOps平台编排和驱动不同的测试能力,实现一体化测试的设计与实现。
一体化测试设计,除了包括测试的相关能力的编排与驱动外,还需考虑到测试管理、质量控制以及测试的基础资源交付自动化等方面,从而最大程度的实现测试过程自动化,测试数据全追踪,从需求进入开始,全面掌握应用的测试开展情况。
企业的应用系统,不管是采用自建、外包或两者结合的方式,也不管是采用传统模式还是敏捷模式进行开发过程管理与执行,其从需求提出到运维下线,IT业务核心过程是相同的,涵盖业务、开发、测试、运维四大阶段,各阶段所涉及的关键过程如下图所示。
当前,企业进行DevOps建设,核心领域主要包括“需求+CICD”,相关工具能力展示如下图:
在整个DevOps平台中,核心能力是进行横向贯穿的管理与工程流水线能力,测试能力及其它纵向能力,具有一定的可替换性。
一体化测试,就是实现从源代码开始,到应用发布的测试,其不仅需涵盖测试的相关方式能力,还需包括测试的配套服务能力,以实现从需求提出,到应用版本测试发布的全过程支持,实现基于需求的全过程质量跟踪,以及最大程度的自动化。一体化测试所需能力如下图所示:
由图可以看出,一体化测试能力所需能力与DevOps平台有较大部分的重叠,在运维领域需要增加异构测试环境资源自动化交付能力,从而才能最大程度的发挥一体化测试的优势。
一体化测试的应用可以从两个维度进行考虑,一是基于DevOps理念的测试左移,将测试的相关能力以服务的方式提供出来,由开发人员在开发过程中按需取用,从而在开发阶段就可以借助测试服务能力,进行应用质量的检测与管控;二是构建企业测试领域的一体化检测认证服务机制,构建完备的测试领域能力。如下图所示:
一体化测试落地需要涉及三个方面的能力,即“基础资源纳管能力(自动化运维)+流程自动化能力(DevOps)+专业测试能力”,初步能力组成分析如下图:
基础资源纳管能力+流程自动化能力可基于蓝鲸平台提供,移动端测试、数据工厂、Mock、全链路压测等专业测试能力补充则可通过开源或商用工具提供,蓝鲸平台能力说明如下图:
通过蓝鲸DevOps平台,可以轻松的实现单元自动化、接口自动化、UI自动化、性能自动化、移动端测试、全链路压测等测试能力的集成与自动化编排应用,既能帮助企业测试或质量部门建立一体化测试能力与低成本的质量控制手段,又为企业研发提供自助化的测试验证服务,实现测试左移,缩短问题反馈弧,降本增效。此外,结合蓝鲸的资源交付自动化能力、第三方的数据工厂能力,还可以进一步提升测试的自动化水平和测试完整度,提升效果的同时降低整体的测试成本。