分享实录 | 单人开发场景下的测试环境实践

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

00微信头图.png

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

本系列分享共有三节内容,本文整理自砧木的第二次分享《单人开发场景下的测试环境实践》。

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

《阿里巴巴测试环境管理概述》要点回顾

在正式开始本次分享之前,我们首先回顾一下上一次分享中我的同事金戟分享的要点。在测试环境管理中,我们主要遇到两个问题,第一个是本地与集群双向互通的问题,在阿里巴巴集团内部主要通过基于CNI(Conteinre Network Interface)机制改造Kubernetes的IP逻辑实现的“扁平化的内网IP”这个方法来解决,这种方式更适合大型集团企业。第二个问题是多人协作开发时,路由的可访问性控制问题,在阿里巴巴内部我们是通过“项目环境”与“隔离域”实现的。

程序员小黑的困扰:测试环境不稳定导致集成效率低下

本次分享,我们将把视角从阿里巴巴集团内部转向外部开发者,特别是广大开发者所在的中小团队,聊聊他们如何解决前文中提到的“本地与集群双向互通”的问题。

我们先来思考一个问题:在本地开发的时候,有哪些让你感到痛苦的事情?

为了帮助大家更好回忆,我们假象了一位主人公——程序员小黑。小黑所在公司采用了微服务相关的技术实践,公司的平台根据业务情况被划分为多个“服务”,小黑所在团队负责的是其中单独一个业务领域。小黑团队会使用平台中的一些公共服务,同时他们也会为平台中的其它服务提供标准的API,方便其它服务调用数据。

为了降低整个平台的运维成本,小黑公司使用了阿里云提供的Kubernetes服务来搭建他们的测试环境及生产环境,通过云效提供的项目协作“看板”管理项目的需求及迭代进度。同时云效也提供了DevOps相关的能力支持,打通了从代码开发到软件发布上线的端到端的过程。小黑公司基于这套DevOps体系,不断的对产品进行迭代和优化。

相对于采用“DevOps”之前,小黑公司的研发效能已经得到极大提升,但近期小黑却遇到了一些困扰。他发现,由于测试环境不稳定,让他浪费了大量的时间在“集成”这件事情上。

其实,团队中的每位成员都希望尽快完成本地开发的功能的验证工作,目前情况下,小黑团队成员只能先将代码提交到代码仓库,然后通过流水线将代码部署到测试环境,因此“代码提交”会变得非常频繁,也就意味着在大部分时间里,你的测试环境会处于更新、发布状态中,整个测试环境的可用性就会变得非常差。甚至有的时候,因为个别成员在本地开发完成后,对代码没有进行充分验证就进行了测试提交,导致整个测试环境“挂掉”。有时因为有紧急的需求需要快速上线,测试环境会被这些紧急变更独占。小黑只能在测试环境可用的短暂的时间里尽可能地去验证自己开发的功能,这就导致小黑最近情绪很低落。

小黑的困扰一:联调其它服务。

其实小黑的需求很简单,他希望在本地代码开发完成之后,能够尽可能快的跟其它服务进行联调,来验证他开发的功能是否OK,但是现在他唯一能依赖的就是那套“公共环境”。

01.png

在本地完成代码开发后,如何高效的与其它服务进行联调呢?经过分析发现,在本地进行联调效率最高,使用公共环境进行测试成本最低,两全其美的办法就是,在本地直接访问云上集群的环境进行测试。对这个“命题作文”,开发者和企业有很多不同的选择,除了在第一次分享中我同事介绍的方法外,我们还推出了一个更轻量的方式通过KT-Connect工具实现。

02.png

KT-Connect是阿里巴巴云效团队研发的面向Kubernetes的本地开发者辅助工具(已经开源),通过“Connect”命令可以实现一键连接云上任意的Kubernetes集群。连接完成之后,可以快速建立本地到集群的VPN网络,同时将Kubernetes集群的DNS解析能力整合到本地,开发者可以像在集群中一样可以直接通过PodIP,ClusterIP以及DNS域名访问到集群内的服务。

小黑的困扰二:其它服务调用我

在这个案例中,小黑既是服务的消费者,同时也会提供一些公共的API供其它服务调用。这时只打通本地到集群的服务,并不能完全解决小黑的问题,必须同时让集群中的服务可以访问本地的服务。

03.png

KT-Connect同样可以帮助我们解决这个问题,这就需要使用“Exchange”和“Mesh”命令。
Exchange(交换)命令通过在集群内部署代理容器,替换集群内的原有应用,并将所有对代理容器的请求直接转发到本地端口。这是一种“完全替换”,这就意味着在同一时间点,只有一位开发者可以将他本地的服务加入到集群中。为了解决这个问题,KT-Connect提供了第三个命令——Mesh(混合)。当我们在本地运营“Mesh”命令后,我们同样会把本地服务加入到集群里面,但是会保持原有的目标服务状态不变,并且本地服务会继承目标服务中所有的标签。依照K8S本身服务发现的原理,请求流量会被随机地转发到原有服务或本地的服务。同时配合Istio的流量规则,就可以让所有正常流量依然保持对原应用的访问,而只对一些有特殊标记的的请求转发到本地。从而可以实现在一套公用测试环境的基础上各自独立的完成本地的集成联调。

KT-Connect带来高效的测试体验

04.png

如前文所述,通过KT-Connect我们可以实现从本地到集群的双向互通。在团队里,其实还有很多“小黑”,我们可以看到这样一个场景:小黑A可以通过“Mesh”命令把本地服务加入到测试环境里,并且可以让集群中一部分特定的流量转发到本地,这样他可以与集群中的其它服务进行联调。小黑B通过“Connect”命令连接到集群,直接在本地进行测试。在某些情况下,小黑B需要依赖的服务刚好是小黑A正在开发的版本,小黑B只要按照Istio的流量规则设置可以调用小黑A服务的值,就可以跟小黑A的服务进行联调。对于小黑C,他既需要调用集群中的服务,又需要集群中的服务回调到本地,所以他在本地既运营了 “Connect”又运行了“Mesh”。如上所示,小黑团队中的所有成员的测试活动都是建立在一套公共环境的基础之上,但是彼此又都有一个相对独立的测试环境,具有很好的可用性。

KT-Connect背后的原理

KT-Connect背后有什么黑科技吗?答案是:没有。我们只是综合利用了两个大家在日常工作中都会用到的能力,通过Kubectl的端口转发可以实现将集群中服务的端口映射到本地,通过SSH协议建立本地与集群之间的隧道。
05.png

以“Connect”命令为例,了解一下KT-Connect背后的原理。如上图所示,当开发者在本地运行“Connect”命令后,首先会创建一个shadow pod实例,这个实例会运行“SSH Server”和“DNS Server”,当实例创建成功之后,就可以通过“port-forward”将代理容器的22端口转映射到本地,如2222端口。此时,就可以通过本地的2222端口建立与集群内部的连接。

06.png

“Exchange”和与“Connect”命令背后的原理类似,我们也会先创建一个代理容器,并通过“port-forward”将代理容器的端口映射到本地。然后根据Exchange的目标服务,判断将代理容器的哪一个端口的请求全部转发到本地的特定端口。

“Mesh”与“Exchange”的最大的差异在于“Exhange”会将原应用的Replicas(副本)直接降到0,会将集群内所有对原应用的流量全部转发到本地。而 “Mesh”则是在保持原有应用Pod不变的前提下,创建一个新的代理容器并且继承原应用的所有标签,并会增加一个随机的version标签。配合Istio的流量规则,可以让所有正常流量依然保持对原应用的访问,而只对一些有特殊标记的的请求转发到本地。从而可以实现在一套公用测试环境的基础上各自独立的完成本地的集成联调。

最后用《持续交付》中的一句话来总结今天的分享:集成通常是一个非常痛苦的过程。那么就应该在每次提交代码后就进行集成,而且应该从项目一开始就这么做。其实句话还可以做一个调整,我们提倡在代码提交之“前”就进行验证。

非常感谢大家的聆听,欢迎大家加入云效开发者交流群和KT-Connect工具用户群与我们交流。


【下期预告】

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


【关于云效】

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

相关文章
|
2月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
2月前
|
数据采集 存储 人工智能
从0到1:天猫AI测试用例生成的实践与突破
本文系统阐述了天猫技术团队在AI赋能测试领域的深度实践与探索,讲述了智能测试用例生成的落地路径。
从0到1:天猫AI测试用例生成的实践与突破
|
3月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
193 6
|
3月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
3月前
|
存储 测试技术 API
数据驱动开发软件测试脚本
今天刚提交了我的新作《带着ChatGPT玩转软件开发》给出版社,在写作期间跟着ChatGPT学到许多新知识。下面分享数据驱动开发软件测试脚本。
133 0
|
3月前
|
人工智能 自然语言处理 测试技术
AI测试平台的用例管理实践:写得清晰,管得高效,执行更智能
在测试过程中,用例分散、步骤模糊、回归测试效率低等问题常困扰团队。霍格沃兹测试开发学社推出的AI测试平台,打通“用例编写—集中管理—智能执行”全流程,提升测试效率与覆盖率。平台支持标准化用例编写、统一管理操作及智能执行,助力测试团队高效协作,释放更多精力优化测试策略。目前平台已开放内测,欢迎试用体验!
|
4月前
|
人工智能 资源调度 jenkins
精准化回归测试:大厂实践与技术落地解析
在高频迭代时代,全量回归测试成本高、效率低,常导致关键 bug 漏测。精准化测试通过代码变更影响分析,智能筛选高价值用例,显著提升测试效率与缺陷捕获率,实现降本增效。已被阿里、京东、腾讯等大厂成功落地,成为质量保障的新趋势。
|
4月前
|
搜索推荐 Devops 测试技术
避免无效回归!基于MCP协议的精准测试影响分析实践
本文揭示传统测试的"孤岛困境",提出MCP(Model Context Protocol)测试新范式,通过模型抽象业务、上下文感知环境和协议规范协作,实现从机械执行到智能测试的转变。剖析MCP如何颠覆测试流程,展示典型应用场景,并提供团队落地实践路径,助力测试工程师把握质量效率革命的新机遇。
|
4月前
|
人工智能 缓存 自然语言处理
大模型性能测试完全指南:从原理到实践
本文介绍了大模型性能测试的核心价值与方法,涵盖流式响应机制、PD分离架构、五大关键指标(如首Token延迟、吐字率等),并通过实战演示如何使用Locust进行压力测试。同时探讨了多模态测试的挑战与优化方向,帮助测试工程师成长为AI系统性能的“诊断专家”。
|
5月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。