pytest-bdd-web

A simple plugin to use with pytest


License
MIT
Install
pip install pytest-bdd-web==0.1.1

Documentation

pytest-bdd-web

PyPI version Python versions See Build Status on Travis CI See Build Status on AppVeyor

pytest plugin providing a BDD 'language' for web app integration-testing.


Features

Implements a simple headless browser that requests web pages according to a URL mapping, parses web forms, and enables assertions about the various web responses using PyQuery selectors (similar to jQuery).

Example:

Feature: Homepage functionality
    Scenario: Homepage
        When the user requests list home
        Then response 0 status code is "200"
        And response 0 element "#main_title" contains 'Welcome'

    Scenario: User profile
        When the user requests view user_profile
        Then response 0 status code is "200"
        And response 0 element "tr:contains('Balance')" contains '45.67'
        And response 0 form-contains-array-outline <arrayfield> <arrayvalue>

        Examples:
        | arrayfield | arrayvalue |
        | choices    | [0 2 3]    |

Requires you to provide these fixtures:

  • client
  • url_mapping

client must implement get and post methods, compatible with Flask.test_client.

Example:

@pytest.fixture
def app():
    """Create, configure a new app instance for each test."""
    "..."
    return app

@pytest.fixture
def client(app):
    return app.test_client()

url_mapping must be a dictionary, with keys of top-level "groups", and values mapping a human-readable "action" to an absolute URL in your web app.

Example:

URL_MAPPING = {
    'home': {
        'list': '/',
        'articles': '/latest/',
    },
    'user_profile': {
        'view': '/user/profile/',
        'update': '/user/profile/update',
    },
    'blog': {
        'delete': '/blog/{}/delete', # {} gets filled from feature args
    },
};
@pytest.fixture
def url_mapping():
    return URL_MAPPING

Requirements

PyQuery, pytest-bdd, mechanize

Installation

You can install "pytest-bdd-web" via pip from PyPI:

$ pip install pytest-bdd-web

Contributing

Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.

License

Distributed under the terms of the MIT license, "pytest-bdd-web" is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.