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}")