Средства тестирования#

В состав Astra Automation входят следующие средства для тестирования контента Ansible:

Сравнительные характеристики#

Сравнительные характеристики утилит представлены в таблице:

Название

Назначение

Тестовая среда

Интеграция с другими утилитами тестирования

Другие особенности

Ansible Lint

  • Проверка качества и стиля кода Ansible (плейбуков, ролей, коллекций).

  • Обеспечение качества кода и соблюдения стандартов при разработке кода Ansible

Статический анализ кода без развертывания тестовых окружений

Интеграция с рабочими процессами CI/CD и редакторами, но без возможности запуска тестовых сценариев

  • Автоматическая проверка кода Ansible на соответствие лучшим практикам.

  • Адаптация кода к новым версиям Ansible.

  • Быстрое выявление потенциальных проблем

Ansible Molecule

  • Разработка и тестирование Ansible ролей: проверка корректности работы, идемпотентности и совместимости

  • Тестирование ролей Ansible в различных средах и конфигурациях

Изолированные тестовые среды (контейнеры, виртуальные машины) с использованием драйверов Docker, Vagrant, Podman и т. д.

  • Интеграция с Ansible (использует его как компонент, который отвечает за настройку тестовой среды после ее создания).

  • Позволяет использовать верификаторы типа Testinfra и Goss, может быть интегрирована с Pytest

  • Модульная архитектура с последовательным жизненным циклом:

    1. destroy;

    2. dependency;

    3. syntax;

    4. create;

    5. converge;

    6. idempotence;

    7. verify;

    8. cleanup.

  • Поддержка множества операционных систем и систем виртуализации

Ansible Pytest

  • Тестирование задач Ansible посредством pytest с использованием расширения pytest‑ansible.

  • Автоматизированное тестирование кода Ansible и интеграция с другими тестовыми сценариями на основе Python

Тестовое окружение pytest, позволяющее выполнять тесты на локальных и удаленных узлах с помощью готовых модулей – фикстур

  • Интеграция с Ansible через готовые модули – фикстуры (ansible_adhoc, ansible_module, ansible_facts, localhost и другие).

  • Позволяет запускать сценарии Ansible Molecule

  • Гибкие возможности параметризации тестов.

  • Маркеры для ограничения узлов или изменения параметров подключения.

  • Упрощение интеграции Ansible в рабочие процессы CI/CD

Tox Ansible

  • Автоматизация тестирования Ansible контента (плейбуков, ролей, коллекций) в мультиверсионном режиме.

  • Тестирование кода с несколькими версиями Python и Ansible в целях проверки совместимости и устойчивости

Изолированные виртуальные окружения (venv), создаваемые Tox для тестирования с разными версиями Python и Ansible

  • Интеграция с ansible-test и pytest.

  • Генерация матриц тестовых окружений для рабочих процессов CI/CD

  • Гибкая настройка через конфигурационный файл tox-ansible.ini.

  • Тестирование кода в окружениях с различными версиями Python и Ansible.

  • Параллельное выполнение тестов

Рабочий процесс#

Рабочий процесс может включать как все указанные средства, так и только часть из них.

Ansible Lint, Ansilbe Pytest, Molecule#

Рабочий процесс с использованием Ansible Lint, Ansible Pytest и Molecule показан на схеме:

../../_images/lint-pytest-molecule.svg

Здесь показана следующая последовательность использования средств тестирования кода Ansible:

  1. Разработчик использует Ansible Lint на этапе написания кода. Это позволяет выявить часть ошибок до попадания кода в репозиторий проекта.

  2. Разработчик публикует код в репозиторий проекта. Это приводит к срабатыванию триггера SCM и запуску процесса CI/CD.

  3. Проверка кода проекта с помощью Ansible Lint. Повторная проверка позволяет предотвратить ситуацию, когда разработчик не использует Ansible Lint на своей рабочей станции.

  4. Запуск тестов Pytest Ansible.

  5. Запуск тестов Molecule для проверки работоспособности ролей:

    1. Molecule создает необходимую для тестов инфраструктуру.

    2. Pytest Ansible проверяет корректность развертывания инфраструктуры.

    3. Molecule применяет роли.

    4. Pytest Ansible или Testinfra проверяет результат применения ролей.

    5. Molecule уничтожает созданную ранее инфраструктуру для тестов.

Если все этапы завершены без ошибок, тестирование считается выполненным успешно. Если хотя бы на одном из этапов возникнут ошибки, тестирование будет остановлено и отмечено как неуспешное, а сведения об ошибках переданы разработчику.

Ansible Lint, Molecule#

Рабочий процесс с использованием Ansible Lint и Molecule показан на схеме:

../../_images/lint-molecule.svg

Здесь показана следующая последовательность использования средств тестирования кода Ansible:

  1. Разработчик использует Ansible Lint на этапе написания кода. Это позволяет выявить часть ошибок до попадания кода в репозиторий проекта.

  2. Разработчик публикует код в репозиторий проекта. Это приводит к срабатыванию триггера SCM и запуску процесса CI/CD.

  3. Проверка кода проекта с помощью Ansible Lint. Повторная проверка позволяет предотвратить ситуацию, когда разработчик не использует Ansible Lint на своей рабочей станции.

  4. Запуск тестов Molecule для проверки работоспособности ролей:

    1. Molecule создает необходимую для тестов инфраструктуру.

    2. Pytest Ansible проверяет корректность развертывания инфраструктуры.

    3. Molecule применяет роли.

    4. Pytest Ansible или Testinfra проверяет результат применения ролей.

    5. Molecule уничтожает созданную ранее инфраструктуру для тестов.

Если все этапы завершены без ошибок, тестирование считается выполненным успешно. Если хотя бы на одном из этапов возникнут ошибки, тестирование будет остановлено и отмечено как неуспешное, а сведения об ошибках переданы разработчику.