Skip to main content

A plugin for nose2 implementing behavior-driven testing.

Project description

A plugin for running behavior-driven tests using gherkin inside nose2.

Usage

To enable planterbox for your project, you’ll want to add the following lines (or similar) to your unittest.cfg:

[unittest]
plugins = planterbox

[planterbox]
always-on = True

planterbox is compatible with nose2.plugins.mp.

Writing Tests

planterbox tests exist inside a python package which provides a context for their execution. You should write your tests in .feature files in the package directory. .feature files have access to all steps defined in or imported into their package’s __init__.py. For example, with the directory structure:

planterbox/
  tests/
    test_feature/
      __init__.py
      basic.feature

If __init__.py contains:

from planterbox import step


@step(r'I add (\d+) and (\d+)')
def add(test, a, b):
    a = int(a)
    b = int(b)
    test.result = a + b


@step(r'the result should be (\d+)')
def check_result(test, value):
    value = int(value)
    test.assertEqual(test.result, value)

basic.feature could contain:

Feature: Basic Tests
    I want to exercise generation of a simple test from a feature.

    Scenario: I need to verify basic arithmetic.
        Given I add 1 and 1
        Then the result should be 2

We could then run this test either by running all of the tests in the suite with nose2 or run it specifically with nose2 planterbox.tests.test_feature:basic.feature. We could even run the first scenario specifically with nose2 planterbox.tests.test_feature:basic.feature:0.

Writing Steps

planterbox steps are python functions decorated with @planterbox.step(PATTERN). PATTERN can be a python regular expression, which must start matching expected step text after the gherkin step prefixes.

Groups matched within PATTERN are provided to the decorated function as arguments. All steps are provided with the ScenarioTestCase object for the currently executing scenario as their first argument. Unnamed groups are provided to the step as positional arguments after this. Named groups will be passed as keyword arguments. PATTERN cannot mix unnamed and named groups. If any named groups are used, all groups must be named groups.

All the steps in a feature’s package will be available to that feature’s scenario. These steps can be defined in the package or imported from somewhere else.

Hooks, Setup, and Teardown

setUpModule and tearDownModule methods in a feature’s __init__.py will be run before and after all features in that package, respectively. planterbox provides some extra hooks for doing preparation or cleanup. Functions can be registered as hooks by decorating them with @planterbox.hook(TIMING, STAGE). TIMING can be 'before' or 'after' and STAGE any of 'feature', 'scenario', 'step', 'failure', or 'error'.

All hooks are expected to take one argument: the TestCase subclass for the active feature.

Scenario Outlines

planterbox supports scenario outlines. These allow you to execute a scenario multiple times with different values. For example:

Feature: Example Tests
    I want to exercise generation of a test with examples from a feature.

    Scenario Outline: I need to verify basic arithmetic with examples.
        Given I add <x> and <y>
        Then the result should be <z>
        Examples:
            x | y | z
            1 | 1 | 2
            1 | 2 | 3
            2 | 1 | 3
            2 | 2 | 4

Your 'before' and 'after' 'scenario' hooks will only run once for the entire scenario outline.

Invoking Tests

You can run tests by allowing nose2’s autodiscovery to find all of your tests, or you can specify specific tests to be run on the command line. When specifying specific tests, you can either specify an entire package, an entire feature, or individual scenarios. Individual scenarios can be specified either by index (from 0) or by name.

nose2 planterbox.tests.test_feature
nose2 planterbox.tests.test_feature:basic.feature planterbox.tests.test_hooks:hooks.feature
nose2 planterbox.tests.test_feature:basic.feature:1
nose2 planterbox.tests.test_feature:basic.feature:0
nose2 planterbox.tests.test_feature:basic.feature:"I need to verify basic arithmetic"
nose2 planterbox.tests.test_feature:basic.feature:"I need to verify basic arithmetic."

If your feature includes multiple scenarios with the same name, all will be run when that name is given. Names with a trailing period can be specified with or without the trailing period.

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

planterbox-0.6.3.tar.gz (13.5 kB view details)

Uploaded Source

Built Distribution

planterbox-0.6.3-py2.py3-none-any.whl (16.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file planterbox-0.6.3.tar.gz.

File metadata

  • Download URL: planterbox-0.6.3.tar.gz
  • Upload date:
  • Size: 13.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for planterbox-0.6.3.tar.gz
Algorithm Hash digest
SHA256 2bb97b109cae2292464fa8533183c6a36a15045d6f7c973486660891896a468c
MD5 ab45acc1274974622e5bc139e144e146
BLAKE2b-256 3269b34ab80f63cbecbacce34018f7501d0ab30c054cdbb8adfabd1602f06b9a

See more details on using hashes here.

File details

Details for the file planterbox-0.6.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for planterbox-0.6.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9f679c33d3ce7e88e2370dc5538cd03933d9a9651b7b68341eae61627515ccbe
MD5 1a8a5e108dbb48f701a9181d25eff8e9
BLAKE2b-256 381008dc0790721c02b7f77b5851e8e2564e99d9761fe7cc4e1d1d246cc56ab5

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