Playwright Python

pip install tracera-playwright

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

Не подключайте tracera-pytest и tracera-playwright в одном прогоне pytest.

Фикстура page — из pytest-playwright. Включите в конфиге Playwright screenshot, video и trace — артефакты попадут в результат Tracera.

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

Ключ Env при повторе: PLAYWRIGHT_RETRY.

Привязка testCaseId и autotestName

Импортируйте стандартные API pytest и Playwright как обычно, а из tracera_playwright — tracera и id.

В объявлении (предпочтительно — привязка сработает, даже если сразу вызвать skip):

from tracera_playwright import id as tracera_id

@tracera_id(42, "e2e/login")
def test_login(page):
    page.goto("https://example.com/login")

Внутри теста (необязательно, если @tracera.id уже привязал кейс):

from tracera_playwright import tracera

def test_login(page):
    tracera.test_case(42, "e2e/login")
    page.goto("https://example.com/login")

Пропуск

Используйте стандартный механизм пропуска pytest (pytest.skip, @pytest.mark.skip, …). Skip reason добавляется в результат как comment.

import os
import pytest
from tracera_playwright import id as tracera_id

@tracera_id(42, "e2e/login")
def test_login(page):
    if not os.environ.get("READY"):
        pytest.skip("env not ready")
    page.goto("https://example.com/login")

Шаги

Используйте 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_playwright import tracera

@pytest.fixture(autouse=True)
def open_shop(page):
    with tracera.step("open shop"):
        page.goto("https://example.com/shop")
    yield
    with tracera.step("cleanup"):
        page.goto("https://example.com/cart/clear")

def test_checkout(page):
    tracera.test_case(10, "e2e/checkout")

    @tracera.step("add {item}")
    def add_to_cart(item: str):
        page.get_by_role("button", name="Add").click()

    add_to_cart("sku-1")  # → шаг "add sku-1"

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

Комментарии, ошибки и вложения: Адаптеры автотестов. Playwright сам прикрепляет скриншоты, видео и Playwright trace — в Tracera изображения открываются в лайтбоксе, видео — во встроенном плеере, а trace — в Trace Viewer.

from tracera_playwright import tracera

def test_login(page):
    tracera.test_case(42, "e2e/login")
    tracera.comment("result-level note")
    tracera.error("result-level error text")

    with tracera.step("open login"):
        page.goto("https://example.com/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_playwright import id as tracera_id

@tracera_id(42, "login as {login}")
@pytest.mark.parametrize("login", ["ok", "sso"])
def test_login(page, login):
    page.goto("https://example.com/login")

Или привязка внутри теста, когда меняется и id кейса:

import pytest
from tracera_playwright import tracera

@pytest.mark.parametrize(
    "case_id,name,path",
    [
        (42, "e2e/login-ok", "/login"),
        (43, "e2e/login-sso", "/login/sso"),
    ],
)
def test_login_row(page, case_id, name, path):
    tracera.test_case(case_id, name)

    with tracera.step("open"):
        page.goto(f"https://example.com{path}")