测试集合
测试您的集合可确保您的代码运行良好并与 Ansible 生态系统的其余部分良好集成。您的集合应该通过 Ansible 代码的健全性测试。您还应该添加单元测试以涵盖集合中的代码,以及集成测试以涵盖集合与 ansible-core 之间的交互。
测试工具
测试集合的主要工具是ansible-test
,这是 Ansible 的测试工具,在测试 Ansible中进行了描述,并由ansible
和ansible-core
包提供。
从您的集合目录使用ansible-test
工具,该目录必须在路径中包含ansible_collections
,例如,对于community.general
集合,路径为collections/ansible_collections/community/general
。有关测试指南,请参见测试集合贡献和测试 Ansible 和集合。
您可以运行多个健全性测试,还可以使用ansible-test
运行插件的单元测试和集成测试。当您测试集合时,请针对您所针对的 ansible-core 版本进行测试。
您必须始终从集合的根目录执行ansible-test
。您可以在 Docker 容器中运行ansible-test
,而无需安装任何特殊要求。Ansible 团队在 ansible/ansible GitHub 存储库和大型社区集合(例如community.general和community.network)中都使用这种方法在 Azure Pipelines 中自动运行提交拉取请求时的测试。
许多不需要在不同操作系统发行版上运行测试的集合使用 GitHub Actions 作为其持续集成 (CI) 平台。collection_template 存储库包含 GitHub Actions 工作流模板,集合开发者可以随意使用这些模板轻松地在他们的集合存储库中设置 CI。
下面的示例演示了如何在 Docker 容器中运行测试。
健全性测试
要运行所有健全性测试
ansible-test sanity --docker default -v
有关更多信息,请参见健全性测试。有关健全性测试以及如何修复已识别问题的详细信息,请参见完整的健全性测试列表。
添加单元测试
您必须将单元测试放在相应的tests/unit/plugins/
目录中。例如,您将把plugins/module_utils/foo/bar.py
的测试放在tests/unit/plugins/module_utils/foo/test_bar.py
或tests/unit/plugins/module_utils/foo/bar/test_bar.py
中。有关示例,请参见community.general 中的单元测试。
要运行所有受支持 Python 版本的所有单元测试
ansible-test units --docker default -v
要仅针对特定 Python 版本运行所有单元测试
ansible-test units --docker default -v --python 3.6
要仅运行特定的单元测试
ansible-test units --docker default -v --python 3.6 tests/unit/plugins/module_utils/foo/test_bar.py
您可以在tests/unit/requirements.txt
文件中指定 Python 要求。有关更多信息,尤其是关于 fixture 文件的信息,请参见单元测试。
添加集成测试
您必须将集成测试放在相应的tests/integration/targets/
目录中。对于模块集成测试,您可以仅使用模块名称。例如,您将把plugins/modules/foo.py
的集成测试放在名为tests/integration/targets/foo/
的目录中。对于非模块插件集成测试,您必须将插件类型添加到目录名称中。例如,您将把plugins/connections/bar.py
的集成测试放在名为tests/integration/targets/connection_bar/
的目录中。对于查找插件,目录必须称为lookup_foo
,对于清单插件,则为inventory_foo
,依此类推。
您可以编写两种不同类型的集成测试
使用
ansible-playbook
运行 Ansible 角色测试,并验证模块的各个方面。它们可能依赖于其他集成测试(通常命名为prepare_bar
或setup_bar
,它们准备一个服务或安装名为bar
的需求以测试模块foo
)来设置所需的资源,例如安装所需的库或设置服务器服务。runme.sh
测试直接作为脚本运行。它们可以设置清单文件,并使用各种设置执行ansible-playbook
或ansible-inventory
。
有关示例,请参见community.general 中的集成测试。有关更多详细信息,另请参见集成测试。
由于集成测试可以安装需求,并设置、启动和停止服务,因此我们建议尽可能在 docker 容器或其他受限环境中运行它们。默认情况下,ansible-test
支持多个操作系统的 Docker 镜像。有关所有选项,请参见受支持的 docker 镜像列表。主要针对与平台无关的集成测试(例如云模块的集成测试)使用default
镜像。以下示例使用fedora35
镜像。
要执行集合的所有集成测试
ansible-test integration --docker fedora35 -v
如果您想要更详细的输出,请使用-vvv
而不是-v
运行命令。或者,指定--retry-on-error
以自动以更高的详细程度重新运行失败的测试。
要仅执行特定目录中的集成测试
ansible-test integration --docker fedora35 -v connection_bar
您可以指定多个目标名称。每个目标名称都是tests/integration/targets/
中目录的名称。
另请参见
- 测试 Ansible
有关测试 Ansible 的更多资源
- 为 Ansible 维护的集合做出贡献
为选定的集合做出贡献的指南
- 沟通
有问题?需要帮助?想分享您的想法?请访问 Ansible 沟通指南