牛角号 #23
牛角号
Ansible 开发者社区的新闻通讯 第 23 期,2021-04-01 (往期)
欢迎来到牛角号,我们的 Ansible 开发者社区新闻通讯。如果您有任何问题或想要分享的内容,请通过 [email protected] 与我们联系,或在此 GitHub 问题 上发表评论。
Ansible 开发者社区的新闻通讯 第 23 期,2021-04-01 (往期)
欢迎来到牛角号,我们的 Ansible 开发者社区新闻通讯。如果您有任何问题或想要分享的内容,请通过 [email protected] 与我们联系,或在此 GitHub 问题 上发表评论。
Ansible 开发者社区的新闻通讯 第 22 期,2021-03-18 (往期)
欢迎来到牛角号,我们的 Ansible 开发者社区新闻通讯。如果您有任何问题或想要分享的内容,请通过 [email protected] 与我们联系,或在此 GitHub 问题 上发表评论。
Ansible 开发者社区的新闻通讯 第 21 期,2021-03-05 (往期)
欢迎来到牛角号,我们的 Ansible 开发者社区新闻通讯。如果您有任何问题或想要分享的内容,请通过 [email protected] 与我们联系,或在此 GitHub 问题 上发表评论。
随着自动化在越来越多的业务案例中变得至关重要,测试自动化代码本身的需求也越来越大。这就是 ansible-test 的用武之地:希望测试其 Ansible 内容集合以进行健全性、单元和集成测试的开发人员可以使用 ansible-test 来实现与源代码存储库集成的测试工作流。
ansible-core 和 ansible-base 都随附一个名为 ansible-test 的 cli 工具,打包,集合开发人员可以使用它来测试其集合及其内容。ansible-test 知道如何执行各种与测试相关的任务,从 lint 模块文档和代码到运行单元和集成测试。
我们将在下面简要介绍 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 编码标准和要求。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 提供了一种在集合中运行和报告单元测试的方法。
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
= 选项添加到任何测试命令以收集代码覆盖率数据。如果您没有使用创建隔离的 python 环境的 --venv
或 --docker
选项,则可能需要使用 --requirements
选项以确保安装了正确版本的覆盖率模块
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 播放列表。这些视频会让您快速了解。
另外,如果您想了解有关构建统一的自动化基础设施运营管道的更多信息,请务必查看我们的自动化基础设施工作流程电子书。
Ansible 开发者社区的新闻通讯 第 20 期,2021-02-18 (往期)
欢迎来到牛角号,我们的 Ansible 开发者社区新闻通讯。如果您有任何问题或想要分享的内容,请通过 [email protected] 与我们联系,或在此 GitHub 问题 上发表评论。