测试集合

测试你的集合可以确保你的代码运行良好,并且与 Ansible 生态系统的其余部分良好集成。你的集合应该通过 Ansible 代码的健全性测试。你还应该添加单元测试来覆盖集合中的代码,以及集成测试来覆盖集合与 ansible-core 之间的交互。

测试工具

测试集合的主要工具是 ansible-test,这是 Ansible 的测试工具,在 测试 Ansible 中有描述,并且由 ansibleansible-core 包提供。

从你的集合目录使用 ansible-test 工具,该目录的路径必须包含 ansible_collections,例如 collections/ansible_collections/community/general 用于 community.general 集合。请参阅 测试集合贡献测试 Ansible 和集合 以了解测试指南。

你可以运行多个健全性测试,以及使用 ansible-test 运行插件的单元测试和集成测试。当测试集合时,针对你所目标的 ansible-core 版本进行测试。

你必须始终从集合的根目录执行 ansible-test。你可以在 Docker 容器中运行 ansible-test,无需安装任何特殊要求。Ansible 团队在 ansible/ansible GitHub 仓库和大型社区集合(如 community.generalcommunity.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.pytests/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_barsetup_bar,它们准备服务或安装名为 bar 的需求以便测试模块 foo)来设置所需的资源,例如安装所需的库或设置服务器服务。

  • runme.sh 测试直接作为脚本运行。它们可以设置清单文件,并使用各种设置执行 ansible-playbookansible-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 沟通指南