Quickstart¶
behave-kit supports three adoption levels — pick the one that fits your team.
Level 1: Automatic wiring¶
Add two lines to your environment.py and every feature is wired
automatically:
from behave_kit import setup, teardown
def before_all(context):
setup(context, env="staging")
def after_scenario(context, scenario):
teardown(context)
That’s it. Soft assertions, context dump on failure, step suggestions, fixtures, and scoped cleanup are all active.
Level 2: Cherry-pick¶
Import only the utilities you need:
from behave_kit import assert_soft, env, load_data
@then("the response should be valid")
def step(context):
assert_soft(context.response.status_code == 200)
api_key = env("API_KEY", required=True)
users = load_data("tests/data/users.csv")
No setup() call required — each utility works standalone.
Level 3: Namespace¶
Use the package as a namespace for clarity in large suites:
import behave_kit as bk
@then("the response should be valid")
def step(context):
bk.assert_soft(context.response.status_code == 200)
api_key = bk.env("API_KEY", required=True)
Examples¶
Soft assertions¶
from behave_kit import use_soft_asserts, assert_soft
@given("I have a soft assert collector active")
def step(context):
use_soft_asserts(context)
@then("the response should be valid")
def step(context):
assert_soft(context.response.status_code == 200)
assert_soft(context.response.body["count"] > 0)
# Failures are accumulated, not raised immediately
TypedContext¶
from behave_kit import TypedContext
class MySchema:
driver: str
base_url: str
@given("I have a typed context")
def step(context):
context.typed = TypedContext(context, MySchema)
context.typed.setup(driver="chrome", base_url="https://test.com")
@then('the driver should be "{driver}"')
def step(context, driver):
assert context.typed.driver == driver
Conditional skip¶
from behave_kit import skip_if_env, skip_if_no_browser
@when("I open the browser")
@skip_if_no_browser
def step(context):
...
@when("I run the production-only step")
@skip_if_env("production")
def step(context):
...
Environment variables¶
from behave_kit import env
api_key = env("API_KEY", required=True)
timeout = env("TIMEOUT", var_type=int, default=30)
debug = env("DEBUG", var_type=bool, default=False)
Data loading¶
from behave_kit import load_data
users = load_data("tests/data/users.csv") # list[dict]
config = load_data("tests/data/config.json") # dict
sheet = load_data("tests/data/sheet.xlsx") # list[dict] (requires [excel])
Fixtures¶
from behave_kit import fixture
@fixture("browser")
def browser_fixture(context):
def setup(ctx):
ctx.browser = {"name": "chrome", "started": True}
def teardown(ctx):
ctx.browser = None
return (setup, teardown)