服务虚拟化技术

文摘   2024-07-15 07:09   四川  

本文是 阿里微服务质量保障 系列文章,本文介绍服务虚拟化,狭义上就是服务模拟。
在微服务架构中,整个应用程序由许多相互调用的服务组成。这些服务可以是单域内部服务,也可以是外部第三方服务。
服务虚拟化是用于模拟应用程序的依赖关系行为的技术。一般来说,在微服务架构中,这些依赖通常是基于REST API的服务,但这一概念也可应用于其他类型的依赖,比如数据库、企业服务总线(ESB)、Web服务、Java消息服务(JMS)或任何使用消息协议进行通信的系统。

为什么需要服务虚拟化?

以下是一些使用服务虚拟化的场景:
  • 当前服务(消费者)依赖的服务(生产者)尚未开发或仍在开发中时。
  • 当服务需要由具有完全不同设置的不同团队并行访问时。
  • 当服务(生产者)由第三方或合作团队控制,并且每天的请求有配额限制。
  • 当生产者服务仅在特定时段可用时。
服务虚拟化通过模拟所需服务的行为来解决所有这些挑战。借助服务虚拟化,建模并部署一个代表生产者服务的虚拟资产,模拟测试所依赖的模块。
图1.1展示了为运行测试而配置真实环境和虚拟化环境之间的区别。左图中可以看到为服务A编写测试需要启动服务B及其数据库。同时,你可能还需要启动服务B依赖的服务C和D。右图中可以看到服务B及其所有依赖都被一个模拟服务B行为的虚拟化服务所替代。
服务虚拟化还应用于测试边界场景,以便全面测试整个应用。针对真实服务测试边界场景较为困难。例如,你可能想测试客户端在接收到生产者低延迟响应时的行为(服务超时场景),或者在发送字符时使用的字符编码与预期不符时的场景。

什么时候使用服务虚拟化?

从单元测试到端到端测试,什么时候会用到服务虚拟化技术呢?
  • 单元测试 —— 在99%的情况下,使用传统的模拟(mock)和插桩(stub)技术就已足够。
  • 组件测试 —— 这是服务虚拟化大放异彩的地方:你可以测试组件如何相互通信,而不依赖于外部服务。
  • 集成测试 —— 集成测试本质上是针对真实服务运行的。在某些测试场景中,依赖的外部服务可能是个问题(如边界情况、第三方服务等),因此会使用服务虚拟化。
  • 契约测试——当针对生产者测试契约时,你可能需要服务虚拟化来模拟生产者服务的依赖关系。
  • 端到端测试——根据定义,端到端测试不应该依赖服务虚拟化,因为你是在对真实系统进行测试。但在某些罕见情况下,如果你依赖于不可靠的第三方服务,服务虚拟化仍可能是一个可行的解决方案。

服务虚拟化工具 Hoverfly

Hoverfly(https://hoverfly.readthedocs.io)是一个开源、轻量级的服务虚拟化代理,用Go编程语言编写。它允许你模拟HTTP和HTTPS服务。如图1.2所示,Hoverfly启动一个代理,该代理使用存储的(预设的)响应来响应请求。这些响应应与真实服务对于提供的请求生成的响应完全相同。如果这个过程执行得当,并且存储的响应对于真实服务来说是准确的,那么Hoverfly将完美地模仿真实服务的响应,你的测试也将是准确的。
注意:Hoverfly Java(https://hoverfly-java.readthedocs.io)是Hoverfly的Java封装,它使你不必直接处理二进制文件和API调用,并且还提供了与JUnit的紧密集成。从现在起,当我们谈论Hoverfly时,我们指的是Java封装。

Hoverfly 工作模式

Hoverfly有三种工作模式:
  • Capture ——像往常一样对真实服务进行请求。请求和响应被Hoverfly代理拦截并记录下来,以便后续使用。
  • Simulate ——为提供的请求返回模拟响应。模拟可能从不同类型来源加载,如文件、类路径资源或URL,或使用Hoverfly领域特定语言(DSL)以编程方式定义。这是开发中服务的首选模式。
  • Capture or Simulate ——结合前两种模式。如果模拟文件不存在,则代理以捕获模式启动;否则,以模拟模式启动。当已开发的服务或第三方服务可用时,优先使用此模式。
图1.3显示了捕获模式的架构:

1. 使用真实服务执行请求,该服务可能部署在测试运行机器之外。

2. Hoverfly代理重定向流量到真实主机,响应被返回。

3. Hoverfly代理为由真实服务交互生成的匹配请求和响应存储脚本文件。

4. 真实响应被返回给调用者。

simulate 模式

  1. 对A发起请求,但调用没有被路由到真实服务,而是被路由到了Hoverfly代理。
  2. Hoverfly代理检查与所提供的请求相对应的响应脚本。
  3. 预设的响应被重放给调用者。
往期系列文章
阿里微服务质量保障系列:微服务知多少
阿里微服务质量保障系列:研发流程知多少
阿里微服务质量保障系列:研发环境知多少
阿里微服务质量保障系列:阿里变更三板斧
阿里微服务质量保障系列:故障演练
阿里微服务质量保障系列:研发模式&发布策略
阿里微服务质量保障系列:性能监控
阿里微服务质量保障系列:性能监控最佳实践
阿里微服务质量保障系列:基于全链路的测试分析实践
- END -

下方扫码关注 软件质量保障,与质量君一起学习成长、共同进步,做一个职场最贵Tester!

往期推荐

聊聊工作中的自我管理和向上管理

经验分享|测试工程师转型测试开发历程

聊聊UI自动化的PageObject设计模式

细读《阿里测试之道》

我在阿里做测开


软件质量保障
所寫即所思|一个阿里质量人对测试技术的思考。
 最新文章