你是否需要编写基础设施中最常见的测试,从单元测试到端到端测试?你应该把你的时间和精力花在编写它们上?你的基础设施测试策略将根据你的系统的复杂性和增长情况而变化。因此,你会不断地评估哪些测试能帮助你在生产前抓住配置问题。
图1中的 测试金字塔图1中的金字塔为不同类型的测试、其范围和频率提供了一个框架。金字塔中最宽的部分表示你应该有更多的这种类型的测试,最窄的部分表示你应该有更少的测试。在金字塔的顶端是端到端的测试,这可能会花费更多的时间和金钱,因为它们需要活跃的基础设施系统。在金字塔的底部是单元测试,它们在几秒钟内运行,不需要整个基础设施系统。我使用测试金字塔作为思考基础设施测试策略的指导原则。

图1.基于测试金字塔,你应该有更多的单元测试,而不是端到端测试,因为运行它们的时间、金钱和资源成本较低。
在现实中,你的测试金字塔的形状可能更像一个长方形或梨形,有时还有缺失的层次。你不会也不应该为每个基础设施配置写每一种类型的测试。在某些时候,测试变得多余,维护起来也不实际。根据你要测试的系统,坚持测试金字塔的理想可能不切实际。
我遵循图2中的准则来编写配置和模块的测试。一般来说,我写:
- 静态分析(单元和契约测试)和使用工厂、构建器和原型模式的模块的集成测试
- 使用适用于环境的一般复合或单子模式,对配置进行单元测试和动态分析(集成和端到端)。

图2.你的测试方法应该根据你写的是模块还是环境配置而有所不同。
当针对工厂、构建者或原型模块运行测试时,重点是单元或合同测试,以强制执行正确的配置、正确的模块逻辑和特定的输入和输出。根据你的开发环境的成本,你可以写一些集成测试,针对临时基础设施资源运行,在测试结束后删除。如果你的模块单独解决一些终端用户的功能,你可以选择为模块编写端到端的测试。通过投入一些时间和精力为有许多输入和输出的模块编写测试,你可以确保变化不会影响上游配置,而且模块可以独立成功运行。
与模块不同,应用于环境的复合或单子基础设施配置并不涉及合同测试。相反,集成测试通常可以确定你是否正确使用了一个工厂、构建器或原型模块。基础设施配置测试策略需要端到端测试,以确定最终用户是否可以使用基础设施系统。你通常会在把变化推广到生产之前,针对一个长期存在的开发环境运行集成和端到端测试。
本节选的内容就到这里。