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)