Behave

pip install tracera-behave

Требуются Python ≥ 3.11 и Behave ≥ 1.2.6 (см. Адаптеры автотестов). tracera-behave на PyPI.

Подключите хуки в Behave environment.py (обычно в features/):

from tracera_behave.environment import (
    after_all,
    after_scenario,
    after_step,
    before_all,
    before_scenario,
    before_step,
)

Этого импорта достаточно — Behave подхватит хуки из environment.py.

Запуск: behave features.

Переменные окружения и режим прогона: Адаптеры автотестов.

Привязка testCaseId и autotestName

Предпочтительны теги на Scenario. Из кода шага доступен и императивный tracera.test_case.

@tracera.id:42
@tracera.name:e2e/login
Scenario: Login
  Given I open the login page

Если @tracera.name не указан, то autotestName принимает значение имени сценария.

Пропуск

Штатный skip Behave (context.scenario.skip(reason)). Skip reason добавляется в результат как comment.

from behave import when

@when("env is not ready")
def not_ready(context):
    context.scenario.skip("env not ready — https://example.com/skip")

Шаги

Каждый Gherkin-шаг попадает в секцию Тест результата (заголовок = имя шага без Given/When/Then). Для вложенности используйте tracera.step(title, body), @tracera.step("…") или with / async with tracera.step("…")::

from behave import when
from tracera_behave import tracera

@when("I add to cart")
def add_to_cart(context):
    with tracera.step("nested leaf"):
        pass

tracera.step в before_scenario попадает в Предусловие результата; Gherkin-шаги — в Тест; tracera.step в after_scenario — в Постусловие результата. Хуки уровня suite (before_all / before_feature) не попадают в отчёт.

Комментарии, ошибки и вложения

Комментарии, ошибки и вложения: Адаптеры автотестов.

from behave import when
from tracera_behave import tracera

@when("I open the login page")
def open_login(context):
    tracera.comment("landed on login")
    tracera.attachment(
        file_name="suite-log.txt",
        mime_type="text/plain",
        data=b"finished login flow",
    )

@when("I note the result")
def note_result(context):
    tracera.comment("result-level note")
    tracera.error("result-level error text")

Параметризованные тесты

Укажите @tracera.id (опционально @tracera.name) на Scenario Outline (не на каждую строку Examples). Каждая строка таблицы — отдельный результат, но все привязаны к одному и тому же кейсу:

Если @tracera.name не указан, то autotestName каждого теста принимает значение имени сценария после подстановки <…> из соответствующей строки Examples. Теги оставляйте фиксированными; меняющийся текст — в заголовке Outline через <…>.

@tracera.id:42
@tracera.name:e2e/login
Scenario Outline: Login row
  Given I open "<path>"

  Examples:
    | path       |
    | /login     |
    | /login/sso |

Здесь и /login, и /login/sso привязываются к кейсу 42.

Если каждой строке требуется свой кейс — добавьте id в таблицу и вызовите tracera.test_case из шага:

Scenario Outline: Login row
  Given I bind case <case_id> as "<name>"
  And I open "<path>"

  Examples:
    | case_id | name           | path       |
    | 42      | e2e/login-ok   | /login     |
    | 43      | e2e/login-sso  | /login/sso |
from behave import given
from tracera_behave import tracera

@given('I bind case {case_id:d} as "{name}"')
def bind_case(context, case_id, name):
    tracera.test_case(case_id, name)