Tutorial 5: Multi-line Text (Step Data)

Goal

Use multi-line text (with tripple-quoted text) for large text sections.

Triple-quoted strings (ala Python docstrings) provide a possible to use large text section as step parameter. Normally, so much text would not fit on one line.

Write the Feature Test

# file:features/tutorial05_step_data.feature
Feature: Step Data (tutorial05)

   Scenario: Some scenario
     Given a sample text loaded into the frobulator:
        """
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
        eiusmod tempor incididunt ut labore et dolore magna aliqua.
        """
    When we activate the frobulator
    Then we will find it similar to English

Provide the Test Automation

# file:features/steps/step_tutorial05.py
# ----------------------------------------------------------------------------
# STEPS:
# ----------------------------------------------------------------------------
from behave   import given, when, then
from hamcrest import assert_that, equal_to

@given('a sample text loaded into the frobulator')
def step_impl(context):
    frobulator = getattr(context, "frobulator", None)
    if not frobulator:
        context.frobulator = Frobulator()
    context.frobulator.text = context.text  #< STEP-DATA from context.text

@when('we activate the frobulator')
def step_impl(context):
    context.frobulator.activate()

@then('we will find it similar to {language}')
def step_impl(context, language):
    assert_that(language, equal_to(context.frobulator.seems_like_language()))

Provide the Domain Model

# file:features/steps/step_tutorial05.py
# ----------------------------------------------------------------------------
# PROBLEM DOMAIN:
# ----------------------------------------------------------------------------
class Frobulator(object):
    def __init__(self, text=None):
        self.text = None
        self.activated = False

    def activate(self):
        self.activated = True

    def seems_like_language(self):
        """
        Business logic how frobulator should react/oracle on text data.
        """
        assert self.text is not None
        assert self.activated
        if self.text.startswith("Lorem ipsum"):
            return "English"
        else:
            return "UNKNOWN"

Run the Feature Test

When you run the feature file from above:

$ behave ../features/tutorial05_step_data.feature
Feature: Step Data (tutorial05)   # ../features/tutorial05_step_data.feature:1

  Scenario: Some scenario                          # ../features/tutorial05_step_data.feature:3
    Given a sample text loaded into the frobulator # ../features/steps/step_tutorial05.py:47
      """
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
      eiusmod tempor incididunt ut labore et dolore magna aliqua.
      """
    When we activate the frobulator                # ../features/steps/step_tutorial05.py:54
    Then we will find it similar to English        # ../features/steps/step_tutorial05.py:58

1 feature passed, 0 failed, 0 skipped
1 scenario passed, 0 failed, 0 skipped
3 steps passed, 0 failed, 0 skipped, 0 undefined
Took 0m0.000s