网约车平台每日都进行更新,然而司机端以及乘客端却极少出现调用失败的情况,他们到底是凭借何种方式来确保几十个服务能够稳定协作的呢?
契约测试解决集成难题

微服务是各自独立进行开发部署的,其接口频繁变动,这样极易引发集成故障。某知名网约车平台曾经有过那样的情况,因为服务之间的数据格式不匹配,所以导致高峰期的时候数千订单计价出现了异常。后来他们引入了消费者驱动契约测试,之后就把服务之间的交互期望转化成了机器能够验证的契约文件。
明确规定请求格式,以及响应数据还有错误码范围的是这些契约。订单服务团队会去定义调用司机服务时的具体期望,其中涵盖必需的司机位置字段以及接单状态枚举值。这些契约既作为验收标准存在,又充当服务间的法律文书 。

Pact框架实现自动化验证
这一平台选用Pact框架来搭建契约的测试体系,开发人员于编写消费者端代码时日,会同步生成涵盖所有预期交互的契约文件,这些文件被上传到共享的Pact Broker存储库当中,以供提供者服务随时去获取。
当司机服务团队对接口作出修改时,其持续集成流水线会自动从Broker拉取所有与之相关的契约,去执行验证测试。在2023年,该平台借助此方法拦截了超过80%的接口破坏性变更,把集成缺陷在生产环境的发生率降低了75%。
组件测试保障业务逻辑
契约测试保证了服务之间的协作,可是每个服务内部的复杂业务逻辑依旧需要进行深度验证,网约车计价服务涵盖了时长、距离、时段、区域调度费等多种因素,传统单元测试在覆盖全场景方面存在困难。

他们针对计价服务,设计了独立的组件测试,运用内存数据库以及模拟对象,来替换真实的外部依赖,该测试可在500毫秒内,启动完整的服务实例,执行涵盖30多种计价规则的测试套件,此测试覆盖了95%以上的业务分支。
测试环境成本大幅降低
传统全链路测试环境得对所有微服务实例予以维护,这致使资源消耗极大。该平台以往借助20台服务器来支撑测试环境,每月的运维成本超出5万元。在采用契约测试与组件测试组合之后,测试环境所依赖的服务器数量减少到了3台。
开发人员于本地开展开发工作之际,也无需再去启动全部的依赖服务了。新成员进行环境搭建之时,所耗费的时间由原本的两天,缩减至两小时,团队的研发效率得以显著提升,功能交付的周期也从四周缩短成了一周。
团队协作模式革新
契约测试对团队间协作方式予以了改变,服务接口变更增添了明晰的验收流程,任何具有破坏性的修改都得先同消费者团队展开协商,这种机制构建起了服务间明确的责任边界,减少了因沟通欠缺造成的生产事故。

平台内部营造出了一种“契约即文档”的文化氛围,一切接口发生变更时均存下可追溯踪迹,在新版本予以发布之前,团队会对契约差异报告展开审查工作,从而保证变更意图跟实现情况保持一致,这样一种透明化的协作情形使得跨团队纠纷降低了60% 。
持续交付成为现实
使用契约测试与组件测试组合后,该平台达成了每日多次的生产部署,在2024年第一季度,他们取得了成功完成200次核心服务发布的成果,且均未引发严重集成问题,这种稳健的发布能力让他们能够快速应对市场变化,达成及时推出新功能的目的。
对测试策略进行的转变,直接对业务指标产生了影响,乘客从下单直至司机接单的平均时间缩短了18%,系统可用性达到了99.95%,这种技术投入最终转化成了真实的用户体验提升以及业务增长。
您于微服务测试实践期间碰到过哪些让人头疼不已的集成方面的问题呢,欢迎分享您自身的经历,要是感觉本文对您存在帮助,请点赞并且分享给更多有需要之人!