微服务间的测试策略

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 微服务间的测试策略

640.jpg

在之前的两篇文章中,我们从宏观和微观的不同角度尝试去设计我们的测试策略,在很多团队中,如果着眼于从微观的单体微服务开展测试活动,技术和成本都存在问题。所以我们需要一些可以更快速落地的方法,来保障微服务之间的可用性和稳定性,今天,我们尝试来聊聊这个问题。


01

640.png



如上图的中间图例所示,微服务之间的通信,通常都是通过Rest或者RPC来调用的。不论是基于哪种协议,都需要事先定义好通信接口。对于微服务间的可用性和稳定性测试,往往都是基于接口(Api)来展开的。所以,首先我们要明确团队对于Api的管理机制是什么。目前主要存在以下几种管理方法:


无文档形态:没有事先定义接口,没有接口文档,测试熟悉接口需要自己抓包,研发之间的联调全靠吼。在这种情况下,就不要去纠结服务间的测试策略了,做好上一层的测试策略即可。


手动维护接口文档:简单的,就用Word写与,好一点的,引入Eolinker这类工具。这个阶段的Api管理最大的问题在于文档的有效性。文档描述和实际代码的差别可能会让你怀疑人生。


由插件自动生成:典型的就是引入Swagger框架,程序在定义接口的时候,自动生成Api文档,大家只需要关注Swagger页面即可。在这种情况下,可以适当开展接口自动化测试,并尝试引入其他的测试方法。


综上,如果你的团队还没做好接口管理的准备,那么不建议你花太多的时间在接口测试上,因为你会做得很痛苦。你可以在适当的时候提醒开发去更新接口文档,让文档看起来有用些,而不是形式化。在这两个层面上,建议你还是做好微服务的整体测试策略。如果你的团队处在第三种状态,才有可能去探讨更多的可能性。


02


当下流行的契约测试,可以从本质上解决接口有效性和稳定性的问题。但这个需要研发的配合,需要主管的推动,也需要团队的实践。契约精神并不那么好建立。在介绍契约测试之前,先介绍一种比较另类的玩法,难度不大,但非常有效,是笔者在自己的团队中实践出来的。


640.png


因为从本质上来说,我们是需要关注接口是否发生了变化。如果我们能及时感知接口的变化,那么就可以快速评估它的影响范围(主要是调用方)。基于这个原则,我们做了如上图所示的设计:

  1. 依赖接口测试平台,完成单接口的测试用例测试,当测试用例被成功执行3次后(这个次数是可配置的,主要用于判断接口是否稳定),会把这个接口的入参和返回结构存到一张表中,作为“契约”;
  2. 同时,会把稳定的接口测试用例,放到定时任务中,去被定时执行(我们配置的是每天两次),在定时任务中,测试用例除了常规的检查点外还需要额外匹配对应的“契约”;
  3. 如果结构(人参和出参)没有变化,则验证通过。如果发现结构发生了变化,则需要通知相关人员(可配置,主要是给测试,由测试确认并推动)
  4. 在经过确认后,如果确认是接口需要被变更,则更新契约信息,保证下次验证是最新的内容(页面点击,系统自动同步)

    640.png


是不是很好玩?技术上实现难度也不大。



03

好了,现在我们来聊聊契约测试,顾名思义是基于契约或者使用契约来测试被测系统,其核心是契约,包括如何制定契约,如果更改契约以及如何使用契约等。首先定义契约必须有 API 的消费者(Consumer)和 API 的提供者(Provider)两端,其次契约还要包含这个 API 的 Request 和 Response 的定义细节,见下图:640.png


业界最常用的三个契约测试框架是 Pact,Swagger 和 Spring Cloud Contract。其中 Pact 是一个支持多种语言的框架,包括 Java,JavaScript,Golang,#C 等多种语言开源免费框架,主要通过编写测试代码来动态生成契约,并主要用于消费者驱动契约类型的测试;而 Swagger 主要是通过手动编写契约来做提供者驱动契约类型的测试;最后 Spring Cloud Contract 主要用于基于 Spring 框架开发的 Web 系统,也是主要通过编写测试代码来动态生成契约来做消费者驱动契约类型的测试。并使用契约生成相应的测试用例和自动化测试。


以上,来源于刘冉老师的文章,原文见文末,在这里不展开介绍,笔者也还在团队尝试试行中。后续有机会再总结。


04


在设计微服务间的测试策略时,还有一个需要关注的点,就是测试环境的使用。由于微服务间的依赖问题,可能会存在版本依赖关系,特别是一些外部的依赖,我们希望会有一个稳定的版本(类似用户系统、邮件系统等基础依赖)。那么一般的做法,是先部署一套稳定的全量版本,然后通过路由配置来处理(具体的路由方式需要参考具体的微服务架构)。如下图所示

640.png



如果上面的思路暂时没有技术能力去实现(路由页面配置),还有一个办法,就是建立多套环境,现在基于容器化的环境拉取和回收,也是非常容易实现的(管理好镜像就好),可以和运维多沟通下。


05


至此,关于微服务的测试策略都讲完了,这些策略都是基于笔者的实践总结出来,业内也可能会有更好的方法,欢迎大家一起讨论。针对不同的团队现状,测试Leader选择合适的方法去落地。没有最好,只有相对合适。

刘冉老师关于契约测试的两篇文章:

https://xie.infoq.cn/article/1c490dabcb429209b07e5b456

https://xie.infoq.cn/article/56006dcd3893324e02d2e5c88


往期推荐:

微服务的测试策略

单体微服务的测试策略

你还记得测试策略么

为什么不选JMeter做接口测试?

敏捷测试系列文章合集

相关文章
|
30天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
93 8
|
1月前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
1月前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
1月前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
61 1
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
MarS:微软开源金融市场模拟预测引擎,支持策略测试、风险管理和市场分析
MarS 是微软亚洲研究院推出的金融市场模拟预测引擎,基于生成型基础模型 LMM,支持无风险环境下的交易策略测试、风险管理和市场分析。
31 8
MarS:微软开源金融市场模拟预测引擎,支持策略测试、风险管理和市场分析
|
1月前
|
算法 NoSQL Java
微服务架构下的接口限流策略与实践#### 一、
本文旨在探讨微服务架构下,面对高并发请求时如何有效实施接口限流策略,以保障系统稳定性和服务质量。不同于传统的摘要概述,本文将从实际应用场景出发,深入剖析几种主流的限流算法(如令牌桶、漏桶及固定窗口计数器等),通过对比分析它们的优缺点,并结合具体案例,展示如何在Spring Cloud Gateway中集成自定义限流方案,实现动态限流规则调整,为读者提供一套可落地的实践指南。 #### 二、
65 3
|
1月前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
70 4
|
1月前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
46 2
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
68 1
|
2月前
|
机器学习/深度学习 人工智能 Java
探索软件测试中的自动化框架选择与优化策略####
本文深入探讨了在软件测试领域,面对众多自动化测试框架时,如何根据项目特性、团队技能及长远规划做出最佳选择,并进一步阐述了优化这些框架以提升测试效率与质量的策略。通过对比分析主流自动化测试框架的优劣,结合具体案例,本文旨在为测试团队提供一套实用的框架选型与优化指南。 ####