BDD with Python, Behave and WebDriver


Behave is a Python BDD plugin which makes it easy to write tests in a natural language style.
To get started, make sure you have installed Behave:

$ sudo pip install behave


You are now ready to create your first story and run it on our Selenium grid.
Run the test with:

$ behave


Example feature (features/google.feature)

Feature: testing google

  Scenario: visit google and check
     When we visit google
     Then it should have a title "Google"

Example steps (features/steps/steps.py)

@when('we visit google')
def step(context):
   context.browser.get('http://www.google.com')

@then('it should have a title "Google"')
def step(context):
   assert context.browser.title == "Google"

Example features/environment.py

from selenium import webdriver

def before_all(context):
    desired_capabilities = webdriver.DesiredCapabilities.FIREFOX
    desired_capabilities['version'] = 'latest'
    desired_capabilities['platform'] = 'WINDOWS'
    desired_capabilities['name'] = 'Testing Selenium with Behave'
    desired_capabilities['client_key'] = 'key'
    desired_capabilities['client_secret'] = 'secret'

    context.browser = webdriver.Remote(
        desired_capabilities=desired_capabilities,
        command_executor="http://hub.testingbot.com/wd/hub"
    )

def after_all(context):
    context.browser.quit()

Configuring capabilities


To let TestingBot know on which browser/platform you want to run your test on, you need to specify the browsername, version, OS and other optional options in the capabilities field.



Before
driver = webdriver.Firefox()

After
driver = webdriver.Remote(
  command_executor='http://key:secret@hub.testingbot.com/wd/hub',
  desired_capabilities=desired_caps)

To see how to do this, please select a combination of browser, version and platform in the drop-down menus below.


1. Select a Platform
2. Select a Browser


Testing Internal/Staged Websites


We've built TestingBot Tunnel, to provide you with a secure way to run tests against your staged/internal webapps. Please see our TestingBot Tunnel documentation for more information about this easy to use tunneling solution.


The example below shows how to easily run a Behave WebDriver test with our Tunnel:


1. Download our tunnel and start the tunnel:

java -jar testingbot-tunnel.jar key secret

2. Adjust your test: instead of pointing to 'hub.testingbot.com/wd/hub' like the example above - change it to point to your tunnel's IP address.
Assuming you run the tunnel on the same machine you run your tests, change to 'localhost:4445/wd/hub'. localhost is the machine running the tunnel, 4445 is the default port of the tunnel.


This way your test will go securily through the tunnel to TestingBot and back:


Example features/environment.py

from selenium import webdriver

def before_all(context):
    desired_capabilities = webdriver.DesiredCapabilities.FIREFOX
    desired_capabilities['version'] = 'latest'
    desired_capabilities['platform'] = 'WINDOWS'
    desired_capabilities['name'] = 'Testing Selenium with Behave'
    desired_capabilities['client_key'] = 'key'
    desired_capabilities['client_secret'] = 'secret'

    context.browser = webdriver.Remote(
        desired_capabilities=desired_capabilities,
        command_executor="http://localhost:4445/wd/hub"
    )

def after_all(context):
    context.browser.quit()

Other Options


We offer many other test options, for example: disable video recording, specifying a custom Firefox Profile, loading Chrome/Firefox/Safari extensions, running an executable before your test starts, uploading files, ...
See our list of test options for a full list of options to customize your tests.



Pick a Python Test Framework


  • Behave

    Behave is behaviour-driven development Python style.

  • Lettuce

    Lettuce is a Python BDD plugin based on Ruby's Cucumber, offering Gherkin stories.

  • PyUnit

    PyUnit is the standard unit testing framework module for Python, described as a Python version of JUnit.