在没有 API 的情况下测试异步微服务
Testing async microservices with no API
我们有 5 个相互异步通信的微服务(更多在路上)。其中 3 个微服务没有任何 API。那些消费来自消息队列的数据,进行一些处理,然后将数据写入另一个队列。其中 2 个微服务确实有 APIs,它们也使用队列中的数据,但将响应发送回调用者。
鉴于此,为了测试服务交互、合同的正确性和端到端流程:
- 测试读取和写入队列的异步服务的最佳方法是什么?
- 消费者合同测试是否适用于任何地方?
- 我觉得端到端的生产测试是可能的,但是可以做一些更细化和更有效的事情吗?
看起来 Pact 可以做到 message-based contract testing。我想我有前进的道路。
首先,让我们纠正一件事 - 您确实有 APIs。 “API-less”服务读取的消息必须有一些已定义的内容或格式。那是 API。你应该测试它,正面和负面。
在开始 whole-system 测试(在模拟生产环境的测试或暂存环境中)之前,您的测试可能应该分层进行,就像在任何其他系统中一样。
- 单元测试以测试每个 class 的行为。例如,在您的 message-handling classes 中,使用提示特定操作的消息调用每个,并测试它是否正常工作。这些通常 运行 非常快,因此在开发代码时经常 运行 它们很容易。
- 集成测试以确保您与 next-level 外部系统的交互正常。例如,您可以使用测试容器 运行 与您的服务交互的排队系统的隔离实例。
这些测试具体采用何种形式取决于您的系统使用何种语言和框架构建。我简要地查看了您引用的 Pact 工具,它采用了类似的方法。
我们有 5 个相互异步通信的微服务(更多在路上)。其中 3 个微服务没有任何 API。那些消费来自消息队列的数据,进行一些处理,然后将数据写入另一个队列。其中 2 个微服务确实有 APIs,它们也使用队列中的数据,但将响应发送回调用者。
鉴于此,为了测试服务交互、合同的正确性和端到端流程:
- 测试读取和写入队列的异步服务的最佳方法是什么?
- 消费者合同测试是否适用于任何地方?
- 我觉得端到端的生产测试是可能的,但是可以做一些更细化和更有效的事情吗?
看起来 Pact 可以做到 message-based contract testing。我想我有前进的道路。
首先,让我们纠正一件事 - 您确实有 APIs。 “API-less”服务读取的消息必须有一些已定义的内容或格式。那是 API。你应该测试它,正面和负面。
在开始 whole-system 测试(在模拟生产环境的测试或暂存环境中)之前,您的测试可能应该分层进行,就像在任何其他系统中一样。
- 单元测试以测试每个 class 的行为。例如,在您的 message-handling classes 中,使用提示特定操作的消息调用每个,并测试它是否正常工作。这些通常 运行 非常快,因此在开发代码时经常 运行 它们很容易。
- 集成测试以确保您与 next-level 外部系统的交互正常。例如,您可以使用测试容器 运行 与您的服务交互的排队系统的隔离实例。
这些测试具体采用何种形式取决于您的系统使用何种语言和框架构建。我简要地查看了您引用的 Pact 工具,它采用了类似的方法。