tap

ansible-tap

Статус сборки Скачать с Ansible Galaxy

Производитель Test Anything Protocol (TAP) для Ansible.

Этот плагин обратного вызова позволяет вам писать тестовые наборы TAP в виде плейбуков Ansible. Считайте это альтернативой только для Ansible к Serverspec и Testinfra.

Требования

  • Ansible 2
  • Python 2.7+

Установка

Хотя вы не можете установить этот плагин напрямую с помощью ansible-galaxy, вы можете использовать ansible-galaxy для его загрузки:

ansible-galaxy install -p roles/ benwebber.tap

Перейдите в каталог роли и выполните make install:

cd roles/benwebber.tap
make install

Это скопирует плагин в ~/.ansible/plugins/callback.

Использование

Настройте Ansible для использования этого плагина в качестве стандартного обратного вызова:

ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i hosts test.yml -l hostname

Вы также можете задать его как стандартный обратный вызов в ansible.cfg:

[defaults]
stdout_callback=tap

Написание тестов Ansible

По умолчанию Ansible прерывает выполнение плейбука, если какая-либо задача не выполнена. Установите ignore_errors: true для всех тестов, чтобы отключить это поведение:

- name: проверить, запущена ли служба
  command: systemctl is-active service
  register: is_active
  tags: diagnostic

- name: подтвердить, что служба запущена
  assert:
    that: is_active.rc == 0
  ignore_errors: true

Это обеспечит выполнение всего тестового набора, кроме неожиданных сбоев.

Если у вас много тестов, вы можете установить ignore_errors: true для block:

- name: проверить, запущена ли служба
  command: systemctl is-active service
  register: is_active
  tags: diagnostic

- name: проверить, включена ли служба
  command: systemctl is-enabled service
  register: is_enabled
  tags: diagnostic

- ignore_errors: true
  block:
  - name: подтвердить, что служба запущена
    assert:
      that: is_active.rc == 0

  - name: подтвердить, что служба включена
    assert:
      that: is_enabled.rc == 0

Если задача не выполнится, плагин выведет информацию об устранении неисправностей в виде встроенного YAML-документа:

not ok - assert: подтвердить, что переменная установлена
  ---
  _ansible_no_log: false
  _ansible_verbose_always: true
  assertion: статус определен
  changed: false
  evaluated_to: false
  failed: true
  invocation:
    module_args:
      that: статус определен
    module_name: assert
  ...

Исключение задач из потока TAP

Часто результат теста будет зависеть от предыдущих задач. Вы, конечно, захотите исключить эти подготовительные задачи из потока TAP.

Чтобы сделать это, просто пометьте подготовительные задачи тегом diagnostic:

- name: подготовить следующий тест
  command: 'true'
  register: true_
  tags: diagnostic

- name: должен всегда проходить
  assert:
    that: true_.rc == 0
  ignore_errors: true

Плагин обратного вызова выведет диагностические строки вместо тестовых строк:

# command: подготовить следующий тест
ok - assert: должен всегда проходить

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

Ожидаемые сбои и неожиданные успехи

TAP поддерживает директиву TODO, чтобы игнорировать тесты для функций, которые еще не были реализованы.

Если тест, отмеченный TODO, не проходит, потребители TAP будут считать это ожидаемым сбоем. Точно так же, если тест, отмеченный TODO, проходит, потребители TAP будут считать это неожиданным успехом.

Помечайте ожидаемые сбои тегом TODO:

- name: ожидаемый сбой
  assert:
    that: false
  ignore_errors: true
  tags: TODO

Это выведет директиву # TODO в потоке TAP:

not ok - assert: ожидаемый сбой # TODO

Если тест проходит, вы получите вывод неожиданного успеха:

ok - assert: ожидаемый сбой # TODO

Пропуск тестов

TAP также поддерживает директиву SKIP, чтобы игнорировать конкретные тесты.

Этот обратный вызов использует оператор when Ansible для управления пропущенными тестами:

- name: это пропущенная задача
  assert:
    that: false
  ignore_errors: true
  when: false

Причина пропуска теста появится в строке теста:

ok - assert: пропущено # SKIP Условная проверка не прошла

Пример

Директория tests/ содержит пример тестового набора, который выдает все возможные результаты тестов.

После установки плагина запустите тестовый набор с помощью:

ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i localhost, -c local tests/playbooks/test_multiple_with_failures.yml

Вы получите следующий поток TAP. Вы можете передать это любому потребителю TAP.

TAP version 13
# command: подготовить следующий тест
ok - assert: проход
not ok - assert: сбой
  ---
  _ansible_no_log: false
  _ansible_verbose_always: true
  assertion: false
  changed: false
  evaluated_to: false
  failed: true
  invocation:
    module_args:
      that: false
    module_name: assert
  ...
not ok - assert: ожидаемый сбой # TODO
ok - assert: неожиданный проход # TODO
ok - assert: пропущено # SKIP Условная проверка не прошла
1..5

Замечания

В данный момент этот плагин поддерживает запуск тестов только на одном хосте одновременно. Спецификация TAP не описывает способ объединения нескольких потоков вывода.

Лицензия

MIT

О проекте

Test Anything Protocol (TAP) producer callback plugin

Установить
ansible-galaxy install benwebber/ansible-tap
Лицензия
mit
Загрузки
110
Владелец