Ansible-test 简介
Ansible-test 简介
随着自动化在越来越多的业务案例中变得至关重要,测试自动化代码本身的需求也越来越高。这就是 ansible-test 的用武之地:想要测试其 Ansible 内容集合的健全性、单元测试和集成测试的开发者可以使用 ansible-test 来实现与源代码库集成的测试工作流程。
ansible-core 和 ansible-base 都打包了一个名为 ansible-test 的 cli 工具,集合开发者可以使用它来测试其集合及其内容。ansible-test 知道如何执行各种与测试相关的任务,从整理模块文档和代码到运行单元测试和集成测试。
我们将在下面简要介绍 ansible-test 的不同功能。
如何运行 ansible-test?
随着 Ansible 内容集合在 Ansible-2.9 中的普遍可用,用户可以在集合内部运行 ansible-test 来测试集合本身。为了让 ansible-test 对集合运行测试,需要从集合根目录或其子目录下运行 ansible-test。
如果尝试从上述目录规范之外运行 ansible-test,它将抛出类似下面的错误
root@root ~/.ansible/collections ansible-test sanity ERROR: The current working directory must be at or below: - an Ansible collection: {...}/ansible_collections/{namespace}/{collection}/ Current working directory: /root/.ansible/collections
从上面的输出中,您可以看到集合根目录在 ansible-test 中的显示形式,它必须是以下形式
{...}/ansible_collections/{namespace}/{collection}/
当您从 Ansible Galaxy 或 Automation Hub 安装集合时,默认安装位置是:{...}/ansible_collections/{namespace}/{collection}/
,这已经满足了上述目录约定。
即使您为 ansible-galaxy cli 指定了安装路径(使用 -p 选项),它也会在给定的路径中创建一个 ansible_collections 目录,并将集合安装到该目录中,如下所示
root@root ~/temp ll total 0 root@root ~/temp ansible-galaxy collection install arista.eos -p . Process install dependency map Starting collection install process Installing 'arista.eos:1.2.0' to '/root/temp/ansible_collections/arista/eos' Installing 'ansible.netcommon:1.4.1' to '/root/temp/ansible_collections/ansible/netcommon' root@root ~/temp ll total 4.0K drwxrwxr-x. 4 root root 4.0K Jan 18 19:21 ansible_collections
请确保在开发集合并在本地开发环境中使用 ansible-test 测试它们时,始终保持上述目录规范。
如何使用 ansible-test 测试集合?
ansible-test 提供了对集合运行不同类型测试的方法,这些测试大体上分为以下类型
- 健全性测试
- 单元测试
- 集成测试
我们将详细介绍每种测试。
健全性测试
健全性测试由用于执行静态代码分析的脚本和工具组成。这些测试的主要目的是强制执行 Ansible 编码标准和要求。ansible-test 包含各种健全性测试来执行代码分析,这些测试可以在文档中找到。
如何运行?
您可以从集合的根目录运行健全性测试套件;下面是如何运行健全性测试的不同场景。
# Run all sanity tests ansible-test sanity # Run all sanity tests against against certain files ansible-test sanity plugins/modules/files/eos_acls.py # Run all tests with a specific version of python (3.7 in this case) ansible-test sanity --python 3.7 # Run all tests inside docker (good if you don't have dependencies installed) ansible-test sanity --docker default # Run validate-modules against a specific file ansible-test sanity --test validate-modules lib/ansible/modules/files/template.py
列出所有可用的健全性测试
ansible-test sanity --list-tests
如何忽略健全性测试?
由于健全性测试在 Ansible 版本之间会发生变化,因此每个 Ansible 主要版本都需要一个单独的忽略文件。
文件名是 tests/sanity/ignore-X.Y.txt
,其中 X.Y
是用于测试集合的 ansible-core/ansible-base
版本。
为每个 Ansible 版本维护一个单独的文件,可以让集合通过多个 Ansible 版本的测试。
有关忽略文件格式的信息,请参考开发指南
只有在少数情况下才会需要忽略,因此请参考集合文档
单元测试
单元测试是针对特定库或模块的小型隔离测试。作为集合开发者/维护者,您希望确保您的代码经过单元测试,而 ansible-test 提供了一种在集合中运行单元测试并进行报告的方法。
tests/units
是所有与单元测试相关内容的存放位置- ansible-test 在底层使用 PyTest 进行单元测试,因此它期望测试位于以
test_
开头或以_test.py
结尾的文件中
有关如何编写单元测试的更多信息,请参考指南。
要运行集合中所有单元测试,请从集合根目录运行以下命令
# Run all tests inside docker (good if you don't have dependencies installed) ansible-test units --docker -v
针对单个模块文件执行
# Only runs if the module directory path and unit test file path are similar ansible-test units --docker -v apt
或针对特定 Python 版本执行
ansible-test units --docker -v --python 2.7 apt
如果要对模块以外的其他内容运行单元测试(例如模块实用程序),请指定整个文件路径
ansible-test units --docker -v test/units/module_utils/basic/test_imports.py
有关高级用法,请查看帮助
ansible-test units --help
代码覆盖率
代码覆盖率报告可以轻松识别未经测试的代码,以便为其编写更多测试。
在任何测试命令中添加 --coverage
= 选项以收集代码覆盖率数据。如果您没有使用 --venv
或 --docker
选项创建隔离的 Python 环境,那么您可能需要使用 --requirements
选项来确保安装了正确版本的 coverage 模块
ansible-test coverage erase ansible-test units --coverage apt ansible-test coverage html
报告可以生成多种不同格式
-
ansible-test coverage report
- 控制台报告。 - [
ansible-test coverage html
- HTML 报告。 - [
ansible-test coverage xml
- XML 报告。
要在测试运行之间清除数据,请使用 ansible-test coverage erase 命令。有关功能的完整列表,请查看联机帮助
ansible-test coverage --help
集成测试
这些是端到端测试,用于检查代码路径功能是否按预期工作,并捕获您尝试自动化的产品中的重大更改。在 ansible-test 的上下文中,本质上
tests/integration
是所有与集成测试相关内容的存放位置。tests/integration/targets
目录包含我们所有的测试用例。每个测试用例都是一个最基本的 Ansible 角色。
结论和后续步骤
如上所示,ansible-test 可以提供很多价值,可以彻底测试 Ansible 内容集合。
有关更多阅读材料和信息,请访问Ansible 测试策略文档。如果您不熟悉 Ansible 内容集合,请查看我们的关于 Ansible 内容集合的 YouTube 播放列表。这些视频将使您快速了解最新情况。
另外,如果您想详细了解如何构建统一的自动化基础设施操作管道,请不要忘记查看我们的自动化基础设施工作流电子书。