事件驱动架构中的测试策略与质量保障
1. 契约测试与消费者驱动契约在事件驱动架构中的应用
契约测试通常与模式验证相关,如破坏性、前向或后向变更等。但它的作用不止于此,它会根据消费者的期望来验证生产服务的正确性。在事件驱动服务中,自动模式验证至关重要,可由模式注册表(如 Kafka 中的 Avro)提供支持。契约测试超越了通用的模式验证规则,它会根据消费者的需求验证生产服务的输入和输出。
契约测试通常位于服务与外部接口的边界,重点是确保生产服务符合消费者的期望。以下是一个简单示例,产品目录服务消费库存服务产生的库存事件。我们可以为库存服务添加一个契约测试,以确保它发布了产品目录服务所需的所有信息。
为了实现更好的性能和稳定性,我们可以使用消息代理的模拟或内存替换。不过,由于序列化和兼容性问题,许多用例依赖消息代理会更有益。这些测试可以通过以相同的方式消费事件、使用相同的模式、序列化协议、头部等,保证消费者能够读取消息。比如,不同的消费者可能对不同的事件流有不同的序列化协议,很容易在配置上出错。通过这种方式,我们能更广泛地保证消费者能正常读取消息。
契约测试还能保证消费者所依赖的一些业务逻辑。例如,在产品创建的多个步骤中,第一步可能只填充必填数据,其余信息会在后续过程中补充。库存信息需要产品有尺寸信息,如添加 XS 尺寸的库存。产品服务可能期望所有库存都与产品尺寸相关联,那么一个可能的验证是,当库存大于零时,尺寸信息也会被发布。这类验证超越了直接的模式验证,能保证生产者的预期行为,若该行为被破坏,会导致下游组件出现问题。
到目前为止,我们讨论了库存服务团队如何单方面为服务添加契约测试。契约测试的一个有价值的迭代是将其与消费者保持一致,即消费者驱
超级会员免费看
订阅专栏 解锁全文
171万+

被折叠的 条评论
为什么被折叠?



