Pytest
pip install tracera-pytest
يتطلب Python ≥ 3.11 وpytest ≥ 8 (انظر محوّلات الاختبار الآلي). tracera-pytest على PyPI.
متغيرات البيئة ووضع التشغيل وإعادة المحاولة: محوّلات الاختبار الآلي.
مفتاح Env عند إعادة المحاولة: PYTEST_RETRY.
ربط testCaseId و autotestName
استورد واجهات pytest القياسية كالمعتاد، ومن tracera_pytest — tracera وid.
عند التصريح (المفضّل — الربط يعمل حتى لو تخطّى الاختبار مبكرًا):
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 القياسي (pytest.skip، @pytest.mark.skip، …). يُضاف سبب التخطّي إلى النتيجة كـ 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 لنفس الدالة. الخطوات داخل fixtures بنطاق function تذهب إلى الإعداد / التنظيف في النتيجة؛ الخطوات داخل الاختبار تذهب إلى قسم الاختبار في النتيجة. خطافات مستوى الـ 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") # → 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. يمكن وضع عناصر نائبة {اسم_الوسيط} / {param_id} فيه؛ يجب أن يطابق {اسم_الوسيط} وسائط دالة الاختبار، وكل صف @pytest.mark.parametrize يملأها من قيم ذلك الصف ({param_id} هو معرّف المعامل إن وفّره pytest). في المثال أدناه تحصل على نتيجتين للحالة 42 باسمي 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
أو اربط داخل الاختبار عندما يتغيّر أيضاً معرّف الحالة:
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