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)