Behave

pip install tracera-behave

需要 Python ≥ 3.11 和 Behave ≥ 1.2.6(见 自动化测试适配器)。tracera-behave on PyPI。

在 Behave 的 environment.py(通常在 features/ 下)接入钩子:

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

有这段 import 即可——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 取 Scenario 名称。

Skip

使用 Behave 标准 skip(context.scenario.skip(reason))。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

在 before_scenario 中的 tracera.step 进入结果的 准备;Gherkin 步骤进入 测试;在 after_scenario 中的 tracera.step 进入结果的 清理。套件级钩子(如 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 行填入 <…> 后的 Scenario 名称。标签保持固定;变化的文本写在 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。

若每一行需要绑定不同用例,把 id 放进表格,并在步骤里调用 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)