作为代码的基础架构告诉我们使用自动化构建的工具。大。像工具ansible,厨师,木偶,盐栈以及其他推动我们写作基础设施长相怎么样,而解决分歧。
在Salt Stack中,这些位称为状态。如果状态与现实不符,该工具将为我们解决。换句话说-我们正在为基础架构编写测试,如果测试失败,该工具将自行修复。至少那是主意。
XP教我们如何使用TDD,问题是它是否适用于基础架构?工具表明确实如此。
我可以想象几种非常有用的测试类型。
我们编写与部署的服务捆绑在一起的冒烟测试,以确保端到端的部署服务正常运行。这将是一个API调用或/和systemctl检查,以确保我们刚刚部署的内容能够正常工作。由于诸如ansible之类的工具具有确保服务正在运行的状态,因此许多功能都可以在相同的状态下涵盖。
有一个项目Molecule允许针对docker或另一个临时虚拟化引擎运行单独的角色(如Ansible所说的那样)。这迫使角色分离,并允许在处理角色时将其与剧本隔离地执行。测试通常允许模拟该角色应该使用的变量。但是,其他示例似乎是ansible引擎的副本(声明文件属于用户...)。
ThoughtWorks的高科技雷达,现在推崇一样的工具INSPEC,serverspec或戈斯用于验证服务器是否满足规范。但是我们正在编写规范,不是吗?
如果我们以状态/角色描述基础架构,那么进一步测试基础架构是否有意义?我想这可能会在较大的组织(由一个团队提供规范并遵循其他规范)中变得更加必要,或者如果有大量角色,也许您想运行其中一部分并从测试中获得快速收益?我很努力地想知道,如果您对相同的问题有一个角色/状态,为什么还要编写测试。
goss
。因此,例如,RPM已安装(可安装),然后测试是否放置了预期的默认文件,或者服务正在运行并正在侦听特定端口。我不想自动解决此问题,但会收到通知并停止进度。当然,Ansible也可以为您测试系统,您只需要明确说明一下即可,但是在我们的案例中,我们使用它goss
来测试容器内的服务行为