Skip to main content

Helpers for creating functional tests in Django, with a unified API for WebTest and Selenium tests.

Project description

https://travis-ci.org/django-functest/django-functest.png?branch=master https://coveralls.io/repos/django-functest/django-functest/badge.svg?branch=master&service=github https://readthedocs.org/projects/pip/badge/?version=latest

Helpers for creating high-level functional tests in Django, with a unified API for WebTest and Selenium tests.

Documentation

The full documentation is at https://django-functest.readthedocs.org.

Installation

pip install django-functest

See also the dependencies documentation for important compatibility information.

Features

  • A simplified API for writing functional tests in Django (tests that check the behaviour of entire views, or sets of views, e.g. a checkout process).

  • A unified API that abstracts over both WebTest and Selenium - write two tests at once!

  • Many of the gotchas and difficulties of using WebTest and Selenium ironed out for you.

  • Well tested - as well as its own test suite, which is run against Firefox, Chrome, and PhantomJS, it is also used by Wolf & Badger for tests covering many business critical functionalities.

Typical usage

In your tests.py:

from django.test import LiveServerTestCase, TestCase
from django_functest import FuncWebTestMixin, FuncSeleniumMixin, FuncBaseMixin

class ContactTestBase(FuncBaseMixin):

    def test_contact_form(self):
        self.get_url('contact_form')
        self.fill({'#id_name': 'Joe',
                   '#id_message': 'Hello'})
        self.submit('input[type=submit]')
        self.assertTextPresent("Thanks for your message")

 class ContactWebTest(FuncWebTestMixin, TestCase):
     pass

 class ContactSeleniumTest(FuncSeleniumMixin, LiveServerTestCase):
     pass

In this way, you can write a single test with a high-level API, and run it in two way - using a fast, WSGI-based method which emulates typical HTTP usage of a browser, and using a full browser that actually executes Javascript (if present) etc.

Under the hood, the WSGI-based method uses and builds upon WebTest and django-webtest.

django-functest provides its functionality as mixins, so that you can have your own base class for tests.

Running Tests

To run the tests:

source <YOURVIRTUALENV>/bin/activate
(myenv) $ ./setup.py develop
(myenv) $ ./runtests.py

Or, to run on all environments:

pip install tox
tox

Firefox tests are currently failing due to incompatibilities with recent Firefox versions (>= 47) and all published versions of Selenium (< 3.0).

This can be worked around by downloading an old version of Firefox from https://www.mozilla.org/en-US/firefox/organizations/all/ and using runtests.py –firefox-binary

Credits

This library was built by developers at Wolf & Badger, released with the kind permission of that company.

Tools used in rendering this package:

History

0.1.9

  • Fix for scrolling to exactly the right place.

  • Added docstrings everywhere, and a base class you can inherit from for the purpose of providing autocomplete help.

0.1.8

  • Django 1.10 compatibility

0.1.7

  • Fixed performance/reliability issue caused by browsers attempting to retrieve /favicon.ico after visiting emptypage.

0.1.6

  • Fixed bug where elements wouldn’t scroll into view if html height is set to 100%

  • New method get_webdriver_options for customizing WebDriver behaviour.

0.1.5

  • Added get_session_data()

  • Improved reliability of FuncSeleniumMixin.get_literal_url()

  • Allow <select> elements to be set using integers for values.

  • Fixed issues with .value() for radio buttons and text areas

  • Fixed bug with setting radio buttons when there are more than one set of radio buttons in the form.

0.1.4

  • Added support for file uploads

0.1.3

  • Support for filling radio buttons

  • More convenient support for quotes and apostrophes (” ‘) in text assertion methods.

0.1.2

  • Fixed wheel building - again!

0.1.1

  • Fixed packaging bug that caused wheels to fail on Python 3.

0.1.0

  • First release on PyPI.

Supported by

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