Behave

pip install tracera-behave

يتطلب Python ≥ 3.11 وBehave ≥ 1.2.6 (انظر محوّلات الاختبار الآلي). tracera-behave على PyPI.

اربط الخطافات في environment.py لـ Behave (عادة تحت features/):

from tracera_behave.environment import (
    after_all,
    after_scenario,
    after_step,
    before_all,
    before_scenario,
    before_step,
)

هذا الاستيراد يكفي — يحمّل Behave الخطافات من environment.py.

التشغيل: behave features.

متغيّرات البيئة ووضع التشغيل: محوّلات الاختبار الآلي.

ربط testCaseId و autotestName

فضّل الوسوم على الـ Scenario. يتوفّر أيضًا tracera.test_case الأمرّي من كود الخطوة.

@tracera.id:42
@tracera.name:e2e/login
Scenario: Login
  Given I open the login page

إذا لم يُحدَّد @tracera.name، فإن autotestName يأخذ قيمة اسم السيناريو.

Skip

استخدم تخطّي Behave القياسي (context.scenario.skip(reason)). يُضاف سبب التخطّي إلى النتيجة كـ comment.

from behave import when

@when("env is not ready")
def not_ready(context):
    context.scenario.skip("env not ready — https://example.com/skip")

الخطوات

كل خطوة Gherkin تُسجَّل ضمن قسم الاختبار للنتيجة (عنوان = اسم الخطوة دون كلمة Given/When/Then). للتداخل استخدم tracera.step(title, body) أو @tracera.step("…") أو with / async with tracera.step("…")::

from behave import when
from tracera_behave import tracera

@when("I add to cart")
def add_to_cart(context):
    with tracera.step("nested leaf"):
        pass

tracera.step في before_scenario يذهب إلى الإعداد الخاصة بالنتيجة؛ خطوات Gherkin إلى الاختبار؛ tracera.step في after_scenario إلى التنظيف الخاصة بالنتيجة. خطافات مستوى الـ suite مثل before_all / before_feature لا تُبلَّغ.

التعليقات والأخطاء والمرفقات

التعليقات والأخطاء والمرفقات: محوّلات الاختبار الآلي.

from behave import when
from tracera_behave import tracera

@when("I open the login page")
def open_login(context):
    tracera.comment("landed on login")
    tracera.attachment(
        file_name="suite-log.txt",
        mime_type="text/plain",
        data=b"finished login flow",
    )

@when("I note the result")
def note_result(context):
    tracera.comment("result-level note")
    tracera.error("result-level error text")

الاختبارات ذات المعلمات

ضع @tracera.id (واختياريًا @tracera.name) على Scenario Outline (وليس على كل صف في Examples). كل صف ينتج نتيجة خاصّة، وكلها مربوطة بنفس الحالة:

إذا لم يُحدَّد @tracera.name، فإن autotestName لكل اختبار يأخذ قيمة اسم السيناريو بعد ملء <…> من صف Examples المقابل. اجعل الوسوم ثابتة؛ والنص المتغيّر في عنوان الـ Outline عبر <…>.

@tracera.id:42
@tracera.name:e2e/login
Scenario Outline: Login row
  Given I open "<path>"

  Examples:
    | path       |
    | /login     |
    | /login/sso |

هنا يُبلَّغ عن /login و/login/sso إلى الحالة 42.

إن احتجت حالة مختلفة لكل صف، ضع المعرّف في الجدول واستدعِ tracera.test_case من خطوة:

Scenario Outline: Login row
  Given I bind case <case_id> as "<name>"
  And I open "<path>"

  Examples:
    | case_id | name           | path       |
    | 42      | e2e/login-ok   | /login     |
    | 43      | e2e/login-sso  | /login/sso |
from behave import given
from tracera_behave import tracera

@given('I bind case {case_id:d} as "{name}"')
def bind_case(context, case_id, name):
    tracera.test_case(case_id, name)