Skip to main content

for "Behavior Driven Development" (BDD) -- a client-facing scripting language to put the squeeze on all your features

Project description

Wheel Status Latest Version License Build status Coverage Documetation

Morelia viridis is a Python Behavior Driven Development platform, conceptually derived from Ruby’s Cucumber Framework.

It is available both at the cheeseshop and GitHub.

Mascot:

http://www.naturfoto.cz/fotografie/ostatni/krajta-zelena-47784.jpg

Installation

sudo pip install Morelia

Quick usage guide

Write feature description:

# calculator.feature

Feature: Addition
    In order to avoid silly mistakes
    As a math idiot
    I want to be told the sum of two numbers

Scenario: Add two numbers
    Given I have powered calculator on
    When I enter 50 into the calculator
    And I enter 70 into the calculator
    And I press add
    Then the result should be 120 on the screen

Create standard python’s unittest and hook Morelia in it:

# test_acceptance.py

import unittest
from morelia import Parser

class CalculatorTestCase(unittest.TestCase):

    def test_addition(self):
        Parser().parse_file('calculator.feature').evaluate(self)

Run test exaclty like your regular tests. Here’s raw unittest example:

python -m unittest -v test_acceptance

And you’ll see which steps are missing:

F
======================================================================
FAIL: test_addition (__main__.CalculatorTestCase)
Addition feature
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_acceptance.py", line 43, in test_addition
    Parser().parse_file('calculator.feature').evaluate(self)
  File "/.../morelia/base.py", line 184, in evaluate
    self.rip(step_matcher_visitor)
  File "/.../morelia/base.py", line 198, in rip
    visitor.after_feature(node)
  File "/.../morelia/visitors.py", line 117, in after_feature
    self._suite.fail(diagnostic)
AssertionError: Cannot match steps:

    def step_I_have_powered_calculator_on(self):
        ur'I have powered calculator on'

        # code
        pass

    def step_I_enter_50_into_the_calculator(self):
        ur'I enter 50 into the calculator'

        # code
        pass

    def step_I_enter_70_into_the_calculator(self):
        ur'I enter 70 into the calculator'

        # code
        pass

    def step_I_press_add(self):
        ur'I press add'

        # code
        pass

    def step_the_result_should_be_120_on_the_screen(self):
        ur'the result should be 120 on the screen'

        # code
        pass

Now implement steps:

# test_acceptance.py

import unittest
from morelia import Parser

class CalculatorTestCase(unittest.TestCase):

    def test_addition(self):
        Parser().parse_file('calculator.feature').evaluate(self)

    def step_I_have_powered_calculator_on(self):
        ur'I have powered calculator on'
        self.stack = []

    def step_I_enter_a_number_into_the_calculator(self, number):
        ur'I enter (\d+) into the calculator'  # match by regexp
        self.stack.append(int(number))

    def step_I_press_add(self):  #  matched by method name
        self.result = sum(self.stack)

    def step_the_result_should_be_on_the_screen(self, number):
        ur'the result should be {number} on the screen'  # match by format-like string
        assert int(number) == self.result

And run it again:

$ python -m unittest -v test_acceptance

test_addition (test_acceptance.CalculatorTestCase)
Addition feature ... ok

----------------------------------------------------------------------
Ran 1 test in 0.016s

OK

Note that Morelia does not waste anyone’s time inventing a new testing back-end just to add a layer of literacy over our testage. Steps are miniature TestCases. Your onsite customer need never know, and your unit tests and customer tests can share their support methods. The same one test button can run all TDD and BDD tests.

Look at example directory for a little more enhanced example.

Documentation

Full documentation is available at http://morelia.readthedocs.org/en/latest/index.html

http://zeroplayer.com/images/stuff/sneakySnake.jpg

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Morelia-0.3.0.tar.gz (31.9 kB view details)

Uploaded Source

Built Distribution

Morelia-0.3.0-py2.py3-none-any.whl (33.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file Morelia-0.3.0.tar.gz.

File metadata

  • Download URL: Morelia-0.3.0.tar.gz
  • Upload date:
  • Size: 31.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for Morelia-0.3.0.tar.gz
Algorithm Hash digest
SHA256 f0f8a2e7d9676ebedc80aa441fd07cdccd657b632fc318889287fd7397672d9b
MD5 a6e812fac383404cead1d963e6b40aaf
BLAKE2b-256 46517ef78ceba1a9c6d125e9366dc6b346c0cfa2c5bc7c2e9a5a0f88704c8e75

See more details on using hashes here.

File details

Details for the file Morelia-0.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for Morelia-0.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9fd247de4c5bcb91babf1c882cbf817dc5721bae3b7a809942e3d0839c60b37f
MD5 83c172c1025c7d0c097ff3889ba79b6c
BLAKE2b-256 f7bf4acb2d45352eaad20500437d80875b474677642f0dbb04c3bd42f24f84d3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page