集成测试
Ansible 集成测试系统。
按剧本测试剧本。
某些测试可能需要凭据。凭据可以在 credentials.yml 中指定。
某些测试可能需要 root 权限。
注意
每个新模块和插件都应该有集成测试,即使这些测试不能在 Ansible CI 基础设施上运行。在这种情况下,测试应该在 别名文件 中使用 unsupported
别名标记。
快速入门
强烈建议您安装并激活 argcomplete
Python 包。它在 bash
中为 ansible-test
测试运行器提供制表符补全功能。
配置
ansible-test 命令
以下示例假设 bin/
在您的 $PATH
中。实现此目的的一种简单方法是使用 env-setup
命令初始化您的环境
source hacking/env-setup
ansible-test --help
您也可以使用完整路径调用 ansible-test
bin/ansible-test --help
integration_config.yml
创建您自己的 integration_config.yml
版本可以设置一些可调参数,以帮助在您的环境中更好地运行测试。某些测试(例如,云测试)只有在提供访问凭据时才会运行。有关支持的凭据的更多信息,请参阅 tests/integration/
目录中的各种 cloud-config-*.template
文件。
先决条件
某些测试假设 hg
、svn
和 git
已安装并位于路径中。某些测试(例如 Amazon Web Services 的测试)需要单独的定义,这将在本文档的后面部分介绍。
(完整的列表待定)
非破坏性测试
这些测试会修改子目录中的文件,但不会执行安装或删除包或子目录之外的任何操作。它们也不会重新配置或重启系统服务。
注意
在容器中运行集成测试
为了保护您的系统免受集成测试造成的任何潜在更改,并确保提供合理的依赖项集,我们建议您始终使用 --docker
选项运行集成测试,例如 --docker ubuntu2204
。通过运行 ansible-test integration --help
获取支持的容器镜像列表。您可以在输出的“目标 Docker 镜像”部分中找到它们。 default
镜像用于健全性和单元测试,以及平台无关的集成测试(例如,云模块的测试)。
以以下方式运行我们的 CI 系统在 Fedora 34 容器中执行的所有 POSIX 平台测试
ansible-test integration shippable/ --docker fedora34
您也可以排除特定测试,例如单个模块的测试
ansible-test integration --exclude git
您也可以针对特定测试,例如单个模块的测试
ansible-test integration ping
您可以使用 -v
选项使输出更加详细
ansible-test integration lineinfile -vvv
使用以下命令列出所有可用目标
ansible-test integration --list-targets
注意
Bash 用户
如果您使用 bash
以及 argcomplete
,可以通过执行以下操作获取完整列表:ansible-test integration <tab><tab>
破坏性测试
这些测试允许安装和删除一些简单的包。您可能需要将它们专门用于虚拟环境,例如 Docker。它们不会重新格式化您的文件系统
ansible-test integration destructive/ --docker fedora34
Windows 测试
这些测试测试 winrm
连接插件和 Windows 模块。您需要定义一个包含远程 Windows 服务器的库存来用于测试,并启用 PowerShell 远程处理才能继续。
运行这些测试可能会导致您的 Windows 主机发生更改,因此请不要针对生产/关键 Windows 环境运行它们。
启用 PowerShell 远程处理(通过远程桌面在 Windows 主机上运行)
Enable-PSRemoting -Force
定义 Windows 库存
cp inventory.winrm.template inventory.winrm
${EDITOR:-vi} inventory.winrm
运行我们的 CI 系统执行的 Windows 测试
ansible-test windows-integration -v shippable/
容器中的测试
如果您有安装了 Docker 或 Podman 的 Linux 系统,建议您使用与 Ansible 持续集成 (CI) 系统相同的容器运行集成测试。
注意
Podman
默认情况下,只有在未安装 Docker CLI 时才会使用 Podman。如果您安装了 Docker,但想使用 Podman,可以通过设置环境变量 ANSIBLE_TEST_PREFER_PODMAN
来更改此行为。
注意
非 Linux 上的 Docker
不建议使用 Docker Engine 在非 Linux 主机(例如 macOS)上运行 Docker。某些测试可能会失败,具体取决于用于测试的镜像。在运行 integration
(而不是 network-integration
或 windows-integration
)时使用 --docker-privileged
选项可以解决此问题。
运行集成测试
要运行所有 CI 集成测试目标以在 Ubuntu 18.04 容器中测试 POSIX 平台
ansible-test integration shippable/ --docker ubuntu1804
您也可以运行特定测试或选择其他 Linux 发行版。例如,要运行针对 Ubuntu 18.04 容器中的 ping
模块的测试
ansible-test integration ping --docker ubuntu1804
容器镜像
容器镜像会定期更新。要查看当前容器镜像列表
ansible-test integration --help
列表位于“目标 Docker 镜像和支持的 Python 版本”标题下。
云测试的其他配置
要运行某些测试,您必须在 tests/integration 目录中提供名为 cloud-config-aws.yml
或 cloud-config-cs.ini
的文件中提供访问凭据。相应的 .template
文件可用于语法帮助。较新的 AWS 测试现在使用文件 tests/integration/cloud-config-aws.yml
。
AWS 的 IAM 策略
Ansible 需要相当广泛的权限才能在 AWS 账户中运行测试。这些权限可以提供给一个专门的用户。这些需要在运行测试之前进行配置。
测试策略
GitHub 存储库 mattclay/aws-terminator 包含两套用于所有现有 AWS 模块集成测试的策略。 hacking/aws_config/setup_iam.yml 剧本可用于设置两个组
ansible-integration-ci 将应用运行任何未标记为 unsupported 的集成测试所需的策略,这些策略旨在镜像 Ansible CI 使用的策略。
ansible-integration-unsupported 将应用运行标记为 unsupported 的集成测试所需的额外策略,包括管理 IAM 角色、用户和组的测试。
创建组后,您需要创建一个用户并将该用户设为这些组的成员。这些策略旨在最大限度地降低该用户的权限。请注意,虽然此策略确实将用户限制在一个区域,但这并不能完全限制用户(主要是因为 Amazon ARN 表示法的限制)。该用户仍然具有查看账户定义的广泛权限,还能够管理与测试无关的一些资源(例如,具有不同名称的 AWS lambda)。无论如何,测试不应该在主要生产账户中运行。
其他所需定义
除了安装策略并将策略提供给运行测试的用户身份外,还需要创建一个名为 ansible_integration_tests 的 lambda 角色,该角色具有 lambda 基本执行权限。
网络测试
有关编写网络测试的指南,请参阅 资源模块集成测试.
了解更多信息
如果您想详细了解改进 Ansible 测试的计划,请加入 Ansible 社区论坛