Pytest

pip install tracera-pytest

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

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

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

testCaseId और autotestName बाँधना

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

Skip

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

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")  # → step "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 डेकोरेटर का दूसरा आर्ग्युमेंट 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_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