spring-boot - spring boot 微服务端到端测试,带有黄瓜和数据库验证
问题描述
我的项目是基于事件驱动的微服务架构。我们正在尝试使用 Cucumber 进行端到端测试,以便测试中的功能以业务可读格式提供。
详情如下。服务架构:
涉及到 4 个微服务。我们向服务 A 发送请求,请求被处理并存储在 DB 中,服务 A 发布事件,服务 B 消费该事件,服务 B 再次处理事件并将结果存储在 DB 中并发布要消费的事件由服务 C 和类似的服务 D。
用户(向服务 A 发布请求)服务 A ->(处理,存储在数据库中并将事件发布到服务 B)-> 服务 b(从 A 消费事件,处理并将结果存储在数据库中,将事件发布到 C).. .
测试策略:作为端到端测试的一部分,我们会将 post 请求发送给服务 A。服务 A 将仅返回响应 200,没有响应正文。
我们需要对每个服务数据库中的数据进行验证,并断言它符合预期。
类似功能文件的东西
Given 系统处于预期状态。当向服务 A 发送请求并且服务返回 200 响应并验证服务 A 数据库中存在已处理数据并验证服务 B 数据库中存在已处理数据并且验证服务 C 数据库中存在已处理数据时
**我想了解,1.进行这种测试的正确方法应该是什么。
- 这是在数据库中进行端到端测试和验证的正确方法还是应该使用其他方法。**
解决方案
这是你的问题:
我们需要对每个服务数据库中的数据进行验证,并断言它符合预期。
这是在单元测试和应用程序测试中完成的。
如果您需要验证每个数据库中的数据是否正确,那么您正在尝试进行单元测试,但您的单元是一堆服务组合。
你正在做一个巨大的单元测试。
单元测试
单元测试验证每个服务中的逻辑是否正确
隔离应用测试
测试 api 是否以正确的状态代码响应正确的错误。它可以正确读取和写入数据库。这里你测试应用程序的api。
端到端
您将一堆服务组合在一起并发布一些数据,然后验证您返回的数据是否符合预期。您不会详细介绍每个服务所做的事情,这已经在早期的测试中得到验证。
这是对服务基本上可以通信并返回您期望的内容的最后检查。你对他们如何做没有兴趣。
你的情况
你在你的服务上发布一些东西,你会得到 200 的回报。那么你应该很高兴并且测试通过了。因为该服务达到了您的预期,您发布了一些内容并返回 200。
早期的测试已经通过(单元测试、应用程序测试),它们告诉您每个服务都遵循给定规范的故事。因此,当您准备好端到端时,您已经测试了到目前为止的所有内容。
只有当一切都被隔离测试时,你才会端到端地进行测试。
在端到端测试中,您对它的执行方式完全不感兴趣,您只对它返回的内容感兴趣。
不要在端到端测试中进行单元测试
推荐阅读
- python - 有没有办法在 Python 中为具有特定模式的二维数组分配自动值,而不用只用一个值填充整个数组?
- c - C - 在 connect() 处冻结
- r - 在 purrr 工作流程中使用 mutate
- react-native - React Navigation 隐藏/显示导航栏
- android - 如何在每英寸设备中设计 PlayerActivity 布局
- python - 使用 np.copy 后如何恢复图像?
- procedure - 使用参数在python中调用mysql过程并出现错误
- python - 从一列中获取值并从中创建新列
- mongodb - mongoalchemy.(flask)中字段更改时如何更新数据库?
- javascript - 内容脚本。为什么这段代码在 Chrome 中有效而在 Firefox 中无效?