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)