“平台工程” 是近年来计算机行业中备受关注的概念。然而,这种思维方式早在很久以前就已经产生,并一直在不断地向着这个方向发展。
在计算机产业的初期,软件开发主要以应用程序为主,软件的开发和部署都是以独立的方式进行。但随着计算机应用的不断扩大,应用程序的复杂性和数量也不断增加,这给软件开发和部署带来了许多挑战,例如如何提高软件的开发效率、如何更好地管理和维护软件等问题。
为了解决这些问题,人们开始探索如何构建一个可重用、可扩展、可配置和可管理的软件平台。最初的平台工程主要关注于如何构建操作系统、编译器和数据库等基础软件平台,以支持更高效、更灵活的软件开发和部署。
随着互联网和移动互联网的发展,平台工程的范围逐渐扩大,不仅包括操作系统和基础软件平台,还包括应用程序平台、云计算平台和物联网平台等。平台工程的目标是为应用程序开发和部署提供更高效、更可靠、更安全和更灵活的基础设施,从而促进计算机产业的进一步发展。
最近,Gartner 发布了 2023 年十大战略技术趋势,其中包括了 “平台工程”。这使得人们重新关注了这个概念。
当 “平台工程” 这个概念提出时,曾经有人宣称它标志着 DevOps 的死亡。那么这两者有什么区别呢?
平台工程主要关注于构建可重用、可扩展、可配置和可管理的软件平台,以支持更高效、更灵活的软件开发和部署。它的主要任务包括构建和维护各种类型的基础软件平台,例如操作系统、编译器、数据库、应用程序平台、云计算平台等等。平台工程有助于开发人员更快地开发和部署软件,提高开发效率和软件质量。
相比之下,DevOps 则是一种软件开发和运营的方法论,旨在通过加强开发和运维之间的协作和沟通,实现快速、高质量的软件开发和部署。它的主要任务包括持续集成、持续交付、自动化测试、自动化部署等等。DevOps 强调开发和运维之间的紧密协作和沟通,从而实现更快的反馈、更快的迭代和更高的软件质量。
可以看出,平台工程和 DevOps 虽然都是软件开发和部署方面的重要方法,但它们的目标和任务略有不同。平台工程主要关注于构建基础设施,而 DevOps 则关注于如何更好地协作和沟通,实现更快、更高质量的软件开发和部署。两者结合可以为软件开发和部署提供更完整、更高效、更可靠的解决方案。
从平台工程的概念出发,测试平台工程应该被视为平台工程的一部分,旨在构建可重用、可扩展、可配置和可管理的测试软件平台,以支持更高效、更灵活的软件开发、部署和测试。
目前,从工作性质上来看,测试开发相关岗位的同学实际上是在从事测试平台工程的工作。
我个人对测试平台工程的理解,应该包含以下内容:
除了上述内容外,根据实际情况,测试平台工程可能还包含以下内容:
在自动化测试中,一个总的平台是必要的,它可以用来调度测试用例。
测试用例应该向着组件化、低代码方向发展,从而确保基础能力的复用性并极大地减少代码编写难度。
针对前端(客户端/网页)的测试用例,通常会调用Selenium
或Appium
等框架,向浏览器或客户端发送动作指令以实现自动化测试。该过程可以抽象为组件属性变动和逻辑执行两个部分。在代码层面,可以先按照PO(Page Object)
的模式管理组件属性,再使用自动化用例串联逻辑。理论上,最终可以发展成页面拖放的模式。
针对后端的测试用例,通常指接口的自动化用例。这类用例也可以进行逻辑抽象,包括获取数据、获取环境信息、拼接参数、发送请求和返回结果断言。在代码层面,可以先按照上述几个阶段规划代码逻辑。理论上,最终也可以发展成页面拖放的模式。
以上能力需要其他底层系统的支持,例如一个统一的数据管理平台,用于管理可用的测试数据,以及一个环境管理平台,用于管理整体的测试环境。
这部分往往被大部分团队忽略,但却是一个非常痛点的问题。在实际工作中,开发和测试同学经常会抱怨缺乏可用的账号来进行测试,或者账号已被别人占用等等问题。
为了解决这些问题,一个比较合适的测试数据管理应该至少包含以下几个要点:
每个团队都或多或少有一套环境管理系统,其最终交付形态取决于各自团队的属性。然而,理论上,这个系统至少应该具备以下几个能力:
从开发或测试同学的角度来看,这个系统需要能够快速提供可运行的环境。
协作管理是一个很重要,但经常被忽略的点。在实际工作中,多人进行协作是非常常见的,尤其在测试阶段,涉及到产品、开发、测试等相关人员。好的协作流程能够快速消除项目中的信息差,缩短测试周期的同时提升交付质量。
协作管理和上面提到的数据管理和环境管理息息相关。例如,如果无法提供有效的环境和数据隔离,那么将会导致不同版本的特性相互冲突和竞争的发生。这种竞争容易感知,但很难解决。因此,一个好的协作管理系统应该能够提供数据和环境的隔离,避免出现冲突和竞争的情况发生。
测试平台工程可以帮助测试团队提高测试效率和质量,降低测试成本,加强团队合作,是现代软件测试工作中不可或缺的一部分。
虽然不同团队面临的问题不尽相同,但要实现一个比较成熟的测试平台工程,需要很大的底层技术能力支持。因此,在上述内容中,我们并没有详细阐述每个点的细节。但是从概述中可以看出,要想实现一个高效的测试平台,需要注意以下几个方面:
首先,需要有一个总的平台来进行测试用例的调度,同时需要将测试用例从硬编码转向组件化的低代码方向,以保证基础能力的复用并且极大地减少代码编写难度。
其次,需要针对前端和后端测试用例分别进行逻辑抽象和代码管理,最终可以发展成为页面拖拽的模式。对于测试数据管理,需要提供随时随地可提供数据、个性化属性的测试数据和独立隔离的测试数据等。
另外,还需要实现环境配置管理、环境资源管理、环境状态监控、环境权限管理和环境自动化管理等功能,以便快速拉起可运行的环境。
最后,好的协作流程能够快速消除项目中的信息差,缩短测试周期的同时提升交付质量。协作管理也和上述提到的数据管理和环境管理息息相关,因此需要提供有效的环境和数据隔离,避免不同版本的特性相互冲突和竞争的发生。
要实现以上设想,需要构建一套强大的服务集群,主要包括以下几点:
微服务架构:平台工程需要支持多个应用程序,每个应用程序都有自己的特性和需求,因此需要采用微服务架构来实现应用程序的独立部署和扩展,同时实现应用程序之间的解耦和通信。
云原生架构:为了实现平台工程的高可用、可扩展和弹性伸缩,需要采用云原生架构,包括容器化、自动化部署、自动化伸缩等特性。
DevOps 工具链:为了实现平台工程的持续集成、持续交付和持续部署,需要使用 DevOps 工具链,包括代码管理、自动化构建、自动化测试、自动化部署等工具。
安全技术:平台工程需要保障数据和应用程序的安全,因此需要采用安全技术,包括身份认证、访问控制、加密、审计等。
平台工程本身的服务最好能够以微服务架构的模式来实现。整个平台复杂度比较高,需要多人分工协作来实现平台的能力。微服务架构的模式比较契合,同时具备强大的扩展性、高可用性和跨语言等特点。
对于线上服务来说,微服务和云原生目前来看几乎就是线上服务的标配了。
相比于传统的测试服务来说,测试平台服务更多要做的是横向拉通,保证各个能力的互联互通。因此,测试平台工程可以帮助测试团队提高测试效率和质量,降低测试成本,加强团队合作,是现代软件测试工作中不可或缺的一部分。
测试平台服务是非常重要的一项工程。通过自动化的方式,整合整个研发流程中开发和测试阶段的复杂流程,从而实现简单高效的协作方式。这消除了复杂流程对于项目中每个成员的理解成本。同时通过工程化的构建,使得整个平台的基础能力扎实,能够应对不同需求和特性的不同应用场景。