Playwright Python

pip install tracera-playwright

Python ≥ 3.11 और pytest ≥ 8 आवश्यक (देखें ऑटोटेस्ट एडेप्टर)। tracera-playwright PyPI पर।

एक ही pytest रन में tracera-pytest और tracera-playwright एक साथ न लोड करें।

page fixture pytest-playwright से मिलती है। Playwright कॉन्फ़िग में screenshot, video और trace चालू करें — आर्टिफ़ैक्ट Tracera परिणाम में जुड़ जाते हैं।

एनवायरनमेंट, रन मोड और रीट्राई: ऑटोटेस्ट एडेप्टर।

रीट्राई Env कुंजी: PLAYWRIGHT_RETRY।

testCaseId और autotestName बाँधना

मानक pytest और Playwright API हमेशा की तरह इम्पोर्ट करें, और 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")

Skip

मानक pytest skip इस्तेमाल करें (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("…"): इस्तेमाल करें (async def पर @tracera.step / await tracera.step(…) भी)। @tracera.step("add {item}") डेकोरेटर में {item} उसी फ़ंक्शन के item आर्गुमेंट से प्रतिस्थापित होता है। function-scoped fixture के अंदर के स्टेप्स परिणाम के सेटअप / टीयरडाउन में जाते हैं; टेस्ट के अंदर के स्टेप्स परिणाम की टेस्ट सेक्शन में। सूट-स्तरीय हुक्स रिपोर्ट नहीं होते।

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")  # → step "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 डेकोरेटर का दूसरा आर्ग्युमेंट autotest नाम है। उसमें {arg_name} / {param_id} प्लेसहोल्डर रख सकते हैं; {arg_name} टेस्ट फ़ंक्शन के आर्ग्युमेंट से मैच करने चाहिए, और हर @pytest.mark.parametrize पंक्ति उन्हें उसी पंक्ति के मानों से भरती है ({param_id} तब जब pytest पैरामीटर id दे)। नीचे उदाहरण में केस 42 के दो results बनते हैं, autotest नाम 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}")