第 8 章 测试微服务架构
到目前为止,我们所讨论的内容已经超出了如何编写测试的范围。我们探讨了广泛的软件设计和开发问题,包括使用 Docker 进行容器化和与 PostgreSQL 的数据库集成。这突显了一个事实:编写好的测试需要对待测应用程序的架构和技术依赖有透彻的理解。
在这些软件开发概念的基础上,我们在第 7 章《Go 语言中的重构》中讨论了代码的演变。我们学习了一些常见的重构技术,并比较了单体应用与微服务架构,这也是 Go Web 应用程序在成长和变得更加成熟时常见的演变过程。
我们将继续从上一章对微服务架构和重构的探索。由于微服务通常由不同的软件团队拥有和开发,它们往往会在没有中央监督的情况下进行更改。在需求和实现变化迅速的环境中,确保系统中的 API 集成点仍然正常工作是我们需要克服的最大挑战之一。另一个关键问题是系统中的错误检测——当出现故障时,如何在复杂的依赖关系图中隔离出故障的服务?
本章将专注于讨论微服务架构的测试,并通过前面章节中介绍的单体 BookSwap Web 应用来进行演示。我们将更深入地了解非功能性测试的实现,这在前面章节中有简要讨论。然后,我们将学习契约测试的新概念,并了解如何利用 Pact 在微服务架构中实现契约。最后,我们将讨论如何将我们已经构建的单体 BookSwap Web 应用拆分成微服务。通过学习本章的概念和面临的挑战,我们还将讨论一些在生产中运行微服务架构的最佳实践。
本章将涵盖以下主题:
-
非功能性测试的实现
-
测试微服务架构的挑战
-
使用 Pact 开始进行契约测试
-
拆分我们到目前为止构建的 BookSwap 单体应用
-
在生产中运行微服务架构的最佳实践
技术要求
要运行本章中的代码示例,您需要安装 Go 1.19 或更高版本。安装过程可以参考 Go 官方文档: https://go.dev/doc/install 。
本书中的代码示例可以在以下地址公开访问: https://github.com/PacktPublishing/Test-Driven-Development-in-Go/chapter08 。