分享实录 | 阿里巴巴测试环境管理实践概述

简介: 在软件研发过程中,“测试环境”是部署最频繁、也是开发者使用最频繁的一种运行环境,稳定而易用的测试环境能够极大提高开发者的工作效率和幸福感。为更好的将阿里巴巴在测试环境管理方面的实践和经验跟广大开发者分享,《云效说码》策划了《阿里巴巴Kubernetes测试环境开源工具箱》系列直播视频,由阿里巴巴技术专家林帆(金戟)和郑云龙(砧木) 来为大家讲述。

00-微信头图.jpg

【以下为分享实录,有删节】

测试环境管理之困

01.jpg

互联网产品的服务通常是由 Web 应用、中间件、数据库和许多后台业务程序组成,一套运行环境就是一个自成一体的小生态。部署软件产品的正式发布版本,为用户提供持续可靠的服务的环境为“正式环境”,而开发者用于日常的开发和验证的运行环境,就是我们说的“测试环境”,它是包含完成软件测试工作所必需的计算机硬件、软件、网络设备、历史数据的总称。

我们为什么要关注“测试环境”呢?因为测试环境出故障的几率非常高,大大影响软件研发的效率,这主要是由于由于频繁的版本变更,以及部署未经充分验证的代码等因素引起的。此外测试环境也是开发者使用最频繁的一种环境,数据表明,测试和联调任务通常占开发者日常工作时间的50%以上,稳定而易用的测试环境能够极大提高开发者的工作效率和幸福感。

理想的测试环境是怎样的?我们认为理想的测试环境需要做到以下几点:

一、本地直连,双向访问互通。开发者的大部分工作是在本地(自己的电脑)中完成的,然后通过测试环境验证所做的工作是否符合预期。如果“本地”和“测试环境”之间,不能够互通的话,开发者要验证自己开发的软件功能就会变得十分困难。

二、独占式随意使用,可重启,可调试,可断点。当团队有多名开发者进行多人并行开发的时候,如果共用一套测试环境就会出现相互干扰的情况。比如当我正在重启测试环境的时候,就可能影响到其它开发者的测试工作。因而理想的测试环境应该是“独占式”的,你使用你的环境,我使用我的环境,彼此不干扰。

三、多人随意组合协作,多服务联调不串流量。当多位开发者在同一个项目上进行合作的时候,开发者之间又是希望互通的。比如我的一个请求,希望调用对方本地的一个服务。同样对方也可以调用我本地的服务。同时,又希望非项目内的开发者的请求不要进来,即做到多服务联调不串流量。

四、多个依赖服务版本同时在线,想测哪个随时切换。当进行大版本更新的时候,我们可能既要测试新版本的兼容性,又要测试老版本的兼容性, 这就要求多个依赖服务版本同时在线,并且可以随时切换。

简单总结一下,理想的测试环境应该是:自由连接、随时可用、互访可控。

那么现实中的测试环境又是怎样的呢?所谓“理想很丰满,现实很骨感”,在一线工作的开发者可能会发现,真实的测试环境并非这么理想。

一、在中小企业,本地的开发机往往是不具有公网IP的机器,大多会使用内网IP地址,这样测试环境要回到本地环境时候是不通的。特别是在 在Kubernetes集群中,每个Pod都会被赋予一个Cluster IP,Cluster IP是一个在Kubernetes集群中特有的内网IP,我们在本地访问Cluster IP也是调不通的。这就造成了本地/集群双向均不通。

二、在中小企业,测试环境通常是共用的,这就会造成前文提到的相互干扰、调用和消息互串等问题。
三、如果开发者想独立拉起一套专用测试环境,不仅费时费力,而且资源成本也是难以招架的。

总之,现实中的测试环境:无法直连、稳定性差、流量混杂。

阿里巴巴的测试环境实践

以上提到的测试环境管理之困,总结一下主要有两点:一是本地和集群之间网络互通的问题;一个是多人协作开发时,路由的可访问性控制问题,比如谁和谁相连,谁和谁不相连,怎样做到相互间不干扰这些问题。

在阿里巴巴内部,我们主要通过两个机制来解决以上痛点:扁平的内网IP和项目环境。

扁平的内网IP主要是基于CNI(Conteinre Network Interface) 机制改造Kubernetes的IP逻辑实现的,可以使集群中的每个Pod分配到的IP与本地机器分配到IP处于一个大的网络环境下,这样就可以解决本地环境和集群之间互通的问题。但是这种方式实施起来比较复杂,而且通用性不高,因为每个企业内部的网络情况都不同,本次分享对这个方法不做详细的展开。

下面我们重点讲解“项目环境”。项目环境是基于RPC、消息中间件的虚拟环境,从表面上看,每个项目环境都是一套独立完整的测试环境,由一系列服务组成集群,而实际上,除了个别当前使用者想要测试的服务,其余服务都是通过路由系统和消息中间件虚拟出来的,指向公共基础环境的相应服务。

02.jpg

如上图所示,在某个开发项目中,我们有公共基础环境和三个独立的项目环境(项目环境)。服务A、服务B、服务C、服务D共同组成了完整的公共基础环境,在项目环境-2中只部署了“服务C”,但对于项目环境-2的使用者而言,他可以通过路由调用公共基础环境中的其它服务,因此他会认为项目环境-2就是一个完整的独立的测试环境。同样的道理,对于开发者而言,他们认为项目环境-1和项目环境-3也同样是完整的独立的测试环境。

我们创建一套“项目环境”肯定是比创建一套包含所有服务的测试环境的成本要低。本质上是基于消息路由的控制,实现集群中部分服务的复用。在这种机制下,许多外表庞大的独立测试环境实际只需要消耗极小的额外基础设施资源,即使给每个开发者配备一套专用的测试环境都是可行的。

03.jpg

为进一步提升测试效率,我们又捣鼓出一种开脑洞的玩法:将本地开发机加入项目环境。在阿里巴巴集团内部,由于开发机和测试环境都使用内网IP地址,稍加变通其实不难将特定的测试环境请求直接路由到开发机。这意味着,使用项目环境的开发者,在进行一项测试时,其服务调用链路上的服务,既可以来自公共基础环境,也可以来自项目环境,甚至来自本地环境。现在,调试集群中的服务变得非常简单,再也不用等待漫长的流水线构建,就像整个测试环境都运行在本地一样。

通过以上介绍的阿里巴巴关于测试环境的解决方案,能给开发者带来怎样的测试体验呢?

04.jpg

  • 开发者会觉得自己坐拥整个服务集群,所有测试服务IP地址都可以由本地直接访问,随时进行断点、单步调试、重新部署服务等操作,而丝毫不会影响到其他人;
  • 当多人协作研发软件时,每位开发者同一时刻只能属于同一个隔离域,同一个隔离域里面的服务相互可见,并且当出现服务调用的时候,会优先调用隔离域里面的服务。不同隔离域里面的服务相互之间不可见,是互不影响的;
  • 由于我们是通过“染色”(打标签)的方式实现的隔离,这种隔离方式非常的灵活,假如某位开发者前面在跟第一个项目进行联调,调试结束后,他想把该服务放入第二个项目中进行调试,他只需要把自己的服务从一个项目环境退出,进入另一个项目环境即可,实现灵活组队协作。

总结

我们将测试环境管理遇到的问题归纳为两个主要问题,第一个是本地与集群互通互联的问题。在阿里巴巴集团内部主要通过基于CNI机制改造Kubernetes的IP逻辑实现的“扁平化的内网IP”这个方法来解决,这种方式更适合大型集团企业。对外,我们也推出了一个更轻量的开发解决方案,主要通过kt-connect这个工具实现,kt-connect是开源免费的,由阿里云·云效提供技术支持,在下一节的分享中我们会详细介绍该工具的使用。

05.jpg

第二个问题,是关于路由的控制,在阿里巴巴内部我们是通过“项目环境”与“隔离域”实现的。对外我们也推出了一个开源解决方案,主要通过kt-connect和kt-virtual-environment这两个开源工具来实现,具体方案会在本系列分享的第三节内容中讲述。


【下期预告】

【直播日期】4月22日 16:00
【直播主题】单人开发场景下的测试环境实践
【直播讲师】郑云龙 阿里巴巴技术专家
【观看方式】云效开发者交流群直播(钉钉群号:群号:23362009)


【关于云效】

云效,企业级一站式DevOps平台,源于阿里巴巴先进的研发理念和工程实践,致力于成为数字企业的研发效能引擎!云效提供从“需求 ->开发->测试->发布->运维->运营”端到端的在线协同服务和研发工具,通过人工智能、云原生技术的应用助力开发者提升研发效能,持续交付有效价值。

相关文章
|
1月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
50 4
|
1月前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
1月前
|
测试技术 Python
探索软件测试的深度与广度:从理论到实践
在数字化时代,软件已成为我们生活中不可或缺的一部分。随着技术的不断进步和用户需求的多样化,确保软件质量变得尤为重要。本文将深入浅出地介绍软件测试的核心概念、类型及其在软件开发生命周期中的重要性。我们将通过实际案例,展示如何实施有效的测试策略,并探讨自动化测试的未来趋势,旨在为读者提供一套完整的软件测试知识体系,帮助提升软件质量和开发效率。
|
1月前
|
测试技术 Python
探索软件测试的奥秘:从理论到实践
在软件开发的宇宙中,软件测试犹如一颗璀璨的星辰,指引着质量的方向。本文将带你穿梭于软件测试的理论与实践之间,揭示其内在的逻辑和魅力。从测试的重要性出发,我们将探讨不同类型的测试方法,并通过实际案例分析,深入理解测试用例的设计和应用。最后,我们将通过一个代码示例,展示如何将理论知识转化为实际操作,确保软件质量的同时,也提升你的测试技能。让我们一起踏上这段探索之旅,发现软件测试的无限可能。
|
1月前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
76 7
|
1月前
|
测试技术
探索软件测试的奥秘:从理论到实践
本文深入探讨了软件测试的基本概念、重要性、主要类型以及实施策略。通过分析不同测试阶段和相应的测试方法,文章旨在为读者提供一套完整的软件测试知识体系,帮助他们更好地理解和应用测试技术,确保软件产品的质量和可靠性。
68 4
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
55 2
|
2月前
|
数据可视化 测试技术 API
软件测试中的自动化测试框架选择与实践
在当今快节奏的软件开发环境中,自动化测试成为了确保软件质量和加速交付的关键。本文将探讨自动化测试的重要性,并比较几种流行的自动化测试框架,包括Selenium、Appium和TestComplete。文章还将提供一些最佳实践和案例研究,以帮助读者更好地理解和实施自动化测试策略。
|
1月前
|
监控 搜索推荐 测试技术
电商API的测试与用途:深度解析与实践
在电子商务蓬勃发展的今天,电商API成为连接电商平台、商家、消费者和第三方开发者的重要桥梁。本文深入探讨了电商API的核心功能,包括订单管理、商品管理、用户管理、支付管理和物流管理,并介绍了有效的测试技巧,如理解API文档、设计测试用例、搭建测试环境、自动化测试、压力测试、安全性测试等。文章还详细阐述了电商API的多样化用途,如商品信息获取、订单管理自动化、用户数据管理、库存同步、物流跟踪、支付处理、促销活动管理、评价管理、数据报告和分析、扩展平台功能及跨境电商等,旨在为开发者和电商平台提供有益的参考。
48 0
|
2月前
|
人工智能 数据管理 jenkins
探索软件测试中的自动化框架:从基础到高级实践
在当今快速发展的软件行业中,自动化测试已成为提高开发效率和保障产品质量的关键手段。本文将深入探讨软件测试自动化的各个方面,包括其重要性、主流的自动化测试框架、以及如何有效地实施自动化测试策略。我们还将通过案例分析,展示自动化测试在实际项目中的应用效果,以及面临的挑战和解决方案。无论是软件开发者还是测试工程师,了解并掌握自动化测试技术都将极大提升工作效率和产品质量。
55 0