我目前正在尝试将基于 VM 的基础设施迁移到基于 Docker 的基础设施,并借此机会向该基础设施添加行为测试。因此,我的目标是将我对基础系统配置所做的所有更改都记录在代码中(例如在 Dockerfile 中),并进行 git 版本控制,并且(在理想情况下)每个更改都应该具有可测试的效果。
我想要做的测试的示例:
- 如果我在“postgres”容器中添加一个用户帐户和一个权限规则,那么用户“x”应该能够从“web”容器访问(仅)数据库“y”。
- 如果我像这样更改 postfix 配置在这里插入零钱,则人类用户必须经过身份验证,但系统用户可以发送未经身份验证的电子邮件。
- 如果我像这样更改 Apache 配置在这里插入零钱,则平均响应时间低于 x 毫秒。
我不太想测试的东西(不过如果可以的话也无妨):
- 文件 x 应该存在。
- 应该安装服务 y。
我想知道进行上述基础设施测试的良好/常见方法是什么,并乐意收到任何建议或听取最佳实践。(我发现服务器规范,但在我看来,这似乎更倾向于支持第二种测试;在我读过的所有例子中,它更倾向于检查系统状态而不是系统行为。)
答案1
在单一的“行为测试”中,您会混合各种想法。测试安全性(访问...)、应用程序监控(响应时间...)、基础设施合规性(文件/服务应存在...)。
由于您要将 infra 作为版本化代码的方式,因此您应该首先像测试任何代码一样对其进行测试,而 serverspec 是一个很好的工具。我个人更喜欢基于 python 的等效框架 testinfra。还有其他的,如 goss、robotframework、inspec……在那里你可以测试很多东西:监听端口 80、服务运行、配置文件存在。此外,由于您可以连接任何代码片段,您可以读取配置文件并检查用户 X 是否可以访问数据库 Y 但不能访问数据库 Z。
至于响应时间,如果是针对实时环境,则属于监控主题;如果是针对上线前的测试阶段,则属于负载测试主题。监控有很多种可能,例如 nagios、zabbix... 对于负载测试,我会选择 locust。