Pytest
pip install tracera-pytest
Требуются Python ≥ 3.11 и pytest ≥ 8 (см. Адаптеры автотестов). tracera-pytest на PyPI.
Переменные окружения, режим прогона и повторы: Адаптеры автотестов.
Ключ Env при повторе: PYTEST_RETRY.
Привязка testCaseId и autotestName
Импортируйте стандартные API pytest как обычно, а из tracera_pytest — tracera и id.
В объявлении (предпочтительно — привязка сработает, даже если сразу вызвать skip):
import pytest
from tracera_pytest import id as tracera_id
@tracera_id(42, "e2e/login")
def test_login():
assert True
Внутри теста (необязательно, если кейс уже привязан через @tracera.id):
from tracera_pytest import tracera
def test_login():
tracera.test_case(42, "e2e/login")
assert True
Пропуск
Используйте стандартный механизм пропуска pytest (pytest.skip, @pytest.mark.skip, …). Skip reason добавляется в результат как comment.
import os
import pytest
from tracera_pytest import id as tracera_id
@tracera_id(42, "e2e/login")
def test_login():
if not os.environ.get("READY"):
pytest.skip("env not ready")
Шаги
Используйте tracera.step(title, body), @tracera.step("…"), with tracera.step("…"): или async with tracera.step("…"): (также @tracera.step / await tracera.step(…) на async def). В декораторе @tracera.step("add {item}") плейсхолдер {item} подставляется из аргумента item этой функции. Шаги внутри function-scoped фикстур попадают в Предусловие / Постусловие результата, шаги внутри теста — в секцию Тест результата. Хуки уровня suite в отчёт не попадают.
import pytest
from tracera_pytest import tracera
@pytest.fixture(autouse=True)
def open_shop():
with tracera.step("open shop"):
pass
yield
with tracera.step("cleanup"):
pass
@tracera.step("add {item}")
def add_to_cart(item: str):
pass
def test_checkout():
tracera.test_case(10, "e2e/checkout")
add_to_cart("sku-1") # → шаг "add sku-1"
Комментарии, ошибки и вложения
Комментарии, ошибки и вложения: Адаптеры автотестов.
from tracera_pytest import tracera
def test_login():
tracera.test_case(42, "e2e/login")
tracera.comment("result-level note")
tracera.error("result-level error text")
with tracera.step("open login"):
tracera.comment("landed on login")
tracera.attachment(
file_name="suite-log.txt",
mime_type="text/plain",
data=b"finished login flow",
)
Параметризованные тесты
Второй аргумент в декораторе @tracera.id — это имя автотеста. В нём можно указать плейсхолдеры {имя_параметра} / {param_id} — имена параметров должны совпадать с аргументами тестовой функции; каждая строка @pytest.mark.parametrize подставляет свои значения ({param_id} — id параметра, если pytest его предоставляет). В примере ниже будут два результата на кейс 42 с именами автотестов login as ok и login as sso:
import pytest
from tracera_pytest import id as tracera_id
@tracera_id(42, "login as {login}")
@pytest.mark.parametrize("login", ["ok", "sso"])
def test_login(login):
assert login
Или привязка внутри теста, когда меняется и id кейса:
import pytest
from tracera_pytest import tracera
@pytest.mark.parametrize(
"case_id,name",
[
(42, "e2e/login-ok"),
(43, "e2e/login-sso"),
],
)
def test_login_row(case_id, name):
tracera.test_case(case_id, name)
with tracera.step("open"):
pass