如何为Ansible功能创建单元测试用例?

时间:2020-04-16 05:45:33

标签: unit-testing ansible yaml

我想为Ansible剧本添加单元测试。我对此并不陌生,尝试过很少的东西,但了解得并不多。我该如何开始并正确编写测试用例?

以下是简单的示例:

  yum: 
    name: httpd 
    state: present

1 个答案:

答案 0 :(得分:0)

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

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

同时,并不是因为您无法对Ansible代码进行单元测试,所以根本无法进行测试。您可以使用yammlintansible-lint执行基本的静态检查。要走得更远,您将必须针对测试目标节点运行您的剧本/角色/收藏集。

使用CI变得非常容易,它使您可以从头生成虚拟机或docker容器并运行脚本以测试是否引发了错误,--check选项成功通过,幂等性得到遵守(即,没有应该在使用相同参数的第二次运行中更改),并且一切都会按预期进行(例如,在上述情况下,打开了端口80,并获得了默认的Apache网页)。

您可以自己编写这类测试(例如,在测试vm中针对localhost运行)。这个Mac Appstore CLI role by Geerlinguy正在通过travis-ci使用此类测试作为示例。

您还可以使用现有工具来帮助您以更有条理的方式编写这些测试,例如molecule。如果您有兴趣,下面是一些使用它的示例角色:

[1] 透明度说明:我是此示例存储库的维护者

相关问题