--- id: LambdaTest/agent-skills/behave-skill version: "7d0e8435" license: MIT install: manual updated: 2026-07-24 --- # behave-skill — This skill automates the creation of Behave test frameworks, enabling you to write behavior-driven development scenarios in Gherkin syntax and corresponding Python step definitions. It streamlines test organization and execution, making it easier to align automated testing with business requirements and maintain readable test suites. Publisher: LambdaTest · Stars: 339 · Updated: 2026-07-24 Install (manual): `git clone https://github.com/LambdaTest/agent-skills` ## SKILL.md # Behave BDD Skill ## Core Patterns ### Feature File (features/login.feature) ```gherkin Feature: User Login As a registered user I want to log into the application Background: Given I am on the login page Scenario: Successful login When I enter "user@test.com" as email And I enter "password123" as password And I click login Then I should see the dashboard And the welcome message should say "Welcome" Scenario: Invalid credentials When I enter "wrong@test.com" as email And I enter "wrong" as password And I click login Then I should see error "Invalid credentials" Scenario Outline: Login with various users When I enter "" as email And I enter "" as password And I click login Then I should see "" Examples: | email | password | result | | admin@test.com | admin123 | Dashboard | | bad@test.com | wrong | Error | ``` ### Step Definitions (features/steps/login_steps.py) ```python from behave import given, when, then from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC @given('I am on the login page') def step_on_login(context): context.browser.get(context.base_url + '/login') @when('I enter "{text}" as email') def step_enter_email(context, text): el = context.browser.find_element(By.ID, 'email') el.clear() el.send_keys(text) @when('I enter "{text}" as password') def step_enter_password(context, text): el = context.browser.find_element(By.ID, 'password') el.clear() el.send_keys(text) @when('I click login') def step_click_login(context): context.browser.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click() @then('I should see the dashboard') def step_see_dashboard(context): WebDriverWait(context.browser, 10).until( EC.url_contains('/dashboard') ) assert '/dashboard' in context.browser.current_url @then('I should see error "{msg}"') def step_see_error(context, msg): error = WebDriverWait(context.browser, 5).until( EC.visibility_of_element_located((By.CSS_SELECTOR, '.error')) ) assert msg in error.text ``` ### Environment Hooks (features/environment.py) ```python from selenium import webdriver def before_all(context): context.base_url = 'http://localhost:3000' def before_scenario(context, scenario): context.browser = webdriver.Chrome() context.browser.implicitly_wait(10) def after_scenario(context, scenario): if scenario.status == 'failed': context.browser.save_screenshot(f'screenshots/{scenario.name}.png') context.browser.quit() ``` ### Tags ```gherkin @smoke Feature: Login @critical Scenario: ... ``` ```bash behave --tags=@smoke behave --tags="@smoke and not @slow" ``` ## Setup: `pip install behave selenium` ## Run: `behave` or `behave features/login.feature` ### Cloud Execution on TestMu AI Set environment variables: `LT_USERNAME`, `LT_ACCESS_KEY` ```python # environment.py from selenium import webdriver import os def before_scenario(context, scenario): lt_options = { "user": os.environ["LT_USERNAME"], "accessKey": os.environ["LT_ACCESS_KEY"], "build": "Behave Build", "name": scenario.name, "platformName": "Windows 11", "video": True, "console": True, "network": True, } options = webdriver.ChromeOptions() options.set_capability("LT:Options", lt_options) context.driver = webdriver.Remote( command_executor=f"https://{os.environ['LT_USERNAME']}:{os.environ['LT_ACCESS_KEY']}@hub.lambdatest.com/wd/hub", options=options, ) ``` ## Report: `behave --format json -o report.json` ## Deep Patterns See `reference/playbook.md` for production-grade patterns: | Section | What You Get | |---------|-------------| | §1 Project Setup | behave.ini, project structure, dependencies | | §2 Feature Files | Gherkin with Scenario Outline, data tables, Background | | §3 Step Definitions | Type registration, API steps, common steps with PyHamcrest | | §4 Environment Hooks | before_all/scenario/feature, screenshot on failure, DB isolation | | §5 Page Objects | BasePage with waits, LoginPage, reusable components | | §6 Fixtures & Test Data | DatabaseHelper, transaction rollback, JSON data loader | | §7 LambdaTest Integration | Remote browser creation, cloud capabilities | | §8 CI/CD Integration | GitHub Actions with Postgres, Selenium, Allure reports | | §9 Debugging Table | 12 common problems with causes and fixes | | §10 Best Practices | 14-item BDD testing checklist | [View on SkillFed](https://skillfed.io/LambdaTest/agent-skills/behave-skill) · [View on GitHub](https://github.com/LambdaTest/agent-skills)