Spring 启动微服务端到端测试,包括黄瓜和数据库验证



我的项目基于事件驱动的微服务架构。我们正在尝试使用黄瓜进行端到端测试,以便以业务可读格式提供所测试的功能。

详情如下。 服务架构:

涉及 4 个微服务。我们将请求发送到服务 A,请求被处理并存储在数据库中,服务 A 发布事件,该事件由服务 B 使用,服务 B 再次处理事件并将结果存储在数据库中,并发布要由服务 C 使用的事件,就像服务 D 一样。

用户(向服务 A 发出请求(服务 A ->(处理、存储在数据库中并将事件发布到服务 B(->服务 b(使用来自 A 的事件,在数据库中处理和存储结果,将事件发布到 C(...

测试策略: 作为端到端测试的一部分,我们将向服务 A 发送 post 请求,服务 A 将仅返回响应 200,没有响应正文。

我们需要对每个服务数据库中的数据进行验证,并断言它符合预期。

类似功能文件的东西

鉴于 系统处于预期状态。 什么时候 将请求发送到服务 A 和 服务返回 200 响应 和 验证服务 A 数据库中是否存在已处理的数据 和 验证服务 B DB 中是否存在已处理的数据 和 验证服务 C DB 中是否存在已处理的数据

**我想了解, 1. 做这种测试的正确方法应该是什么。

  1. 这是在数据库中进行端到端测试和验证的正确方法还是应该使用其他方法。

这是你的问题:

我们需要对每个服务数据库中的数据进行验证,并断言它符合预期。

这是在单元测试和应用程序测试中完成的。

如果您需要验证每个数据库中的数据是否正确,那么您正在尝试执行单元测试,但您的单元是一堆服务的组合。

您正在执行一个巨大的单元测试。


单元测试

单元测试验证每个服务中的逻辑是否正确

隔离应用程序测试

测试 API 是否使用正确的状态代码进行响应,以正确无误。它正确读取和写入数据库。在这里,您可以测试应用程序的 api。

端到端

你把一堆服务粘在一起,然后发布一些数据,你验证你得到的数据是否符合预期。您没有详细介绍每个服务做了什么,这已经在前面的测试中得到了验证。

这是服务基本上可以通信并返回您期望的内容的最终检查。你对他们如何做到这一点没有兴趣


您的案例

你在你的服务上发布一些东西,你会得到200的回报。那你应该很高兴,测试通过了。因为服务做了你期望的,所以你发布了一些东西,它返回了 200。

早期的测试已经通过(单元测试,应用程序测试(,它们告诉您每个服务都遵循给定规范的故事。因此,当您准备好进行端到端时,您已经测试了到目前为止的所有内容。

只有当所有内容都经过隔离测试时,您才会做到端到端。

在端到端测试中,你对它如何执行完全不感兴趣,你只对它返回的内容感兴趣。


不要在端到端测试中进行单元测试

最新更新