unit-testing - 如何为 Ansible 功能创建单元测试用例?
问题描述
我想为我的 ansible playbook 添加单元测试。我对此很陌生,尝试了一些事情,但没有太多了解。我该如何开始并正确编写测试用例?
下面是一个简单的例子:
yum:
name: httpd
state: present
解决方案
Ansible 不是一种编程语言,而是一种工具,可以检查您描述的状态与您运行的节点的状态是否一致。所以你不能对你的任务进行单元测试。他们在某种程度上已经在进行自己的测试。运行这些任务的底层 ansible 二进制文件在其开发过程中使用了自身的单元测试。
您上面的示例要求 ansible 测试httpd
目标计算机上是否存在,ok
如果是这种情况,changed
它是否必须安装软件包以满足要求,或者error
是否出现问题,将返回。
同时,并不是因为你不能对你的 ansible 代码进行单元测试,所以根本不可能进行任何测试。yammlint
您可以使用和执行基本的静态检查ansible-lint
。要更进一步,您必须针对测试目标节点运行您的剧本/角色/集合。
这对于 CI 来说变得非常容易,它可以让你从头开始生成虚拟机或 docker 容器并运行你的脚本来测试没有错误被触发,--check
选项成功通过,服从幂等性(即在第二次运行时什么都不应该改变相同的参数),并且一切都按预期工作(例如,在您的上述情况下,端口 80 已打开并且您获得了默认的 Apache 网页)。
您可以自己编写这些测试(例如,在测试虚拟机中针对 localhost 运行)。Geerlinguy 的这个Mac Appstore CLI 角色通过 travis-ci 使用此类测试作为示例。
您还可以使用现有工具来帮助您以更结构化的方式编写这些测试,例如molecule
. 如果您有兴趣,这里有一些使用它的示例角色:
- Geerlinguy 的 Redis 角色
- ThoTeam [1]的 nexus3-oss 角色
[1]透明度注意事项:我是此示例存储库的维护者
推荐阅读
- css - 响应式媒体查询
- java - 如何在 JSONObject 中处理来自 RESTful API 的“空”字符串?
- git - 将代码推送到 github 公共驱动器时出错
- visual-studio-code - 如何在 VS Code 中修改主题
- powershell - 如何在 Windows 上为 javac 使用命令行参数文件?
- awk - 使用 awk 查找包含高于和低于指定数字的值的所有列?
- android - 电子邮件显示为空
- python - 我应该在 Python 中对队列使用锁吗?
- reactjs - 当事务处于待处理状态时处理 UI (MetaMask)
- python - 使用 BeautifulSoup (python) 提取自定义“数据”标签