首页 > 解决方案 > 如何为 Ansible 功能创建单元测试用例?

问题描述

我想为我的 ansible playbook 添加单元测试。我对此很陌生,尝试了一些事情,但没有太多了解。我该如何开始并正确编写测试用例?

下面是一个简单的例子:

  yum: 
    name: httpd 
    state: present

标签: unit-testingansibleyaml

解决方案


Ansible 不是一种编程语言,而是一种工具,可以检查您描述的状态与您运行的节点的状态是否一致。所以你不能对你的任务进行单元测试。他们在某种程度上已经在进行自己的测试。运行这些任务的底层 ansible 二进制文件在其开发过程中使用了自身的单元测试。

您上面的示例要求 ansible 测试httpd目标计算机上是否存在,ok如果是这种情况,changed它是否必须安装软件包以满足要求,或者error是否出现问题,将返回。

同时,并不是因为你不能对你的 ansible 代码进行单元测试,所以根本不可能进行任何测试。yammlint您可以使用和执行基本的静态检查ansible-lint。要更进一步,您必须针对测试目标节点运行您的剧本/角色/集合。

这对于 CI 来说变得非常容易,它可以让你从头开始生成虚拟机或 docker 容器并运行你的脚本来测试没有错误被触发,--check选项成功通过,服从幂等性(即在第二次运行时什么都不应该改变相同的参数),并且一切都按预期工作(例如,在您的上述情况下,端口 80 已打开并且您获得了默认的 Apache 网页)。

您可以自己编写这些测试(例如,在测试虚拟机中针对 localhost 运行)。Geerlinguy 的这个Mac Appstore CLI 角色通过 travis-ci 使用此类测试作为示例。

您还可以使用现有工具来帮助您以更结构化的方式编写这些测试,例如molecule. 如果您有兴趣,这里有一些使用它的示例角色:

[1]透明度注意事项:我是此示例存储库的维护者


推荐阅读