benwebber.tap

ansible-tap

Status Budowy Pobierz z Ansible Galaxy

Producent protokołu testowania czegokolwiek (TAP) dla Ansible.

Ten plugin callback pozwala na pisanie zestawów testowych TAP jako playbooków Ansible. Można to traktować jako alternatywę dla Serverspec i Testinfra tylko w Ansible.

Wymagania

  • Ansible 2
  • Python 2.7+

Instalacja

Chociaż nie możesz zainstalować tego pluginu bezpośrednio za pomocą ansible-galaxy, możesz użyć ansible-galaxy, aby go pobrać:

ansible-galaxy install -p roles/ benwebber.tap

Przejdź do katalogu roli i uruchom make install:

cd roles/benwebber.tap
make install

To skopiuje plugin do ~/.ansible/plugins/callback.

Użytkowanie

Skonfiguruj Ansible, aby używał tego pluginu jako standardowego callbacka wyjścia:

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

Możesz także ustawić go jako domyślny callback w ansible.cfg:

[defaults]
stdout_callback=tap

Pisanie testów Ansible

Domyślnie Ansible przerwie odgrywanie, jeśli jakiekolwiek zadanie się nie powiedzie. Ustaw ignore_errors: true na wszystkich testach, aby wyłączyć to zachowanie:

- name: sprawdzenie, czy usługa działa
  command: systemctl is-active service
  register: is_active
  tags: diagnostic

- name: upewnij się, że usługa działa
  assert:
    that: is_active.rc == 0
  ignore_errors: true

To zapewni, że Ansible wykona cały zestaw testów, z wyjątkiem niespodziewanej awarii.

Jeśli masz dużo testów, możesz ustawić ignore_errors: true na block:

- name: sprawdzenie, czy usługa działa
  command: systemctl is-active service
  register: is_active
  tags: diagnostic

- name: sprawdzenie, czy usługa jest włączona
  command: systemctl is-enabled service
  register: is_enabled
  tags: diagnostic

- ignore_errors: true
  block:
  - name: upewnij się, że usługa działa
    assert:
      that: is_active.rc == 0

  - name: upewnij się, że usługa jest włączona
    assert:
      that: is_enabled.rc == 0

Jeśli zadanie się nie powiedzie, plugin wyświetli informacje o problemach w formie osadzonego dokumentu YAML:

not ok - assert: upewnij się, że zmienna jest ustawiona
  ---
  _ansible_no_log: false
  _ansible_verbose_always: true
  assertion: status jest zdefiniowany
  changed: false
  evaluated_to: false
  failed: true
  invocation:
    module_args:
      that: status jest zdefiniowany
    module_name: assert
  ...

Wykluczanie zadań z strumienia TAP

Często wynik testu będzie zależał od wcześniejszych zadań. Naturalnie, chcesz wykluczyć te zadania przygotowawcze z strumienia TAP.

Aby to zrobić, po prostu oznacz zadania przygotowawcze tagiem diagnostic:

- name: przygotowanie następnego testu
  command: 'true'
  register: true_
  tags: diagnostic

- name: powinno zawsze przechodzić
  assert:
    that: true_.rc == 0
  ignore_errors: true

Plugin callback wydrukuje linie diagnostyczne zamiast linii testowych:

# command: przygotowanie następnego testu
ok - assert: powinno zawsze przechodzić

W przeciwieństwie do indywidualnych przypadków testowych, prawdopodobnie nie chcesz ignorować błędów w przypadku tego rodzaju zadania. Awarie oznaczałyby błąd w zbiorze testów, a nie błąd testu.

Oczekiwane awarie i niespodziewane sukcesy

TAP wspiera dyrektywę TODO, aby zignorować testy funkcji, które nie zostały jeszcze wdrożone.

Jeśli test oznaczony jako TODO się nie powiedzie, konsumenci TAP uznają to za oczekiwaną awarię. Podobnie, jeśli test oznaczony jako TODO przejdzie, konsumenci TAP uznają to za niespodziewany sukces.

Oznacz oczekiwane awarie tagiem TODO:

- name: oczekiwana awaria
  assert:
    that: false
  ignore_errors: true
  tags: TODO

To spowoduje wyjście dyrektywy # TODO w strumieniu TAP:

not ok - assert: oczekiwana awaria # TODO

Jeśli test przejdzie, otrzymasz wyjście niespodziewanego sukcesu:

ok - assert: oczekiwana awaria # TODO

Pomijanie testów

TAP wspiera również dyrektywę SKIP, aby zignorować konkretne testy.

Ten callback wykorzystuje instrukcję when Ansible do kontrolowania pomijanych testów:

- name: to jest pomijane zadanie
  assert:
    that: false
  ignore_errors: true
  when: false

Przyczyna pominięcia testu pojawi się w linii testowej:

ok - assert: pominięte # SKIP Sprawdzanie warunków nie powiodło się

Przykład

Katalog tests/ zawiera przykładowy zestaw testów, który produkuje wszystkie możliwe wyniki testów.

Po zainstalowaniu pluginu uruchom zestaw testów:

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

Otrzymasz następujący strumień TAP, który możesz przekazać dowolnemu konsumentowi TAP.

TAP version 13
# command: przygotowanie następnego testu
ok - assert: przechodzi
not ok - assert: niepowodzenie
  ---
  _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: oczekiwana awaria # TODO
ok - assert: niespodziewany sukces # TODO
ok - assert: pominięte # SKIP Sprawdzanie warunków nie powiodło się
1..5

Zastrzeżenia

Obecnie ten plugin wspiera tylko uruchamianie testów na jednym hoście na raz. Specyfikacja TAP nie opisuje sposobu łączenia wielu strumieni wyjściowych.

Licencja

MIT

O projekcie

Test Anything Protocol (TAP) producer callback plugin

Zainstaluj
ansible-galaxy install benwebber.tap
Licencja
mit
Pobrania
129
Właściciel