Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

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

Project Description
===============
django-functest
===============

.. image:: https://travis-ci.org/django-functest/django-functest.png?branch=master
:target: https://travis-ci.org/django-functest/django-functest

.. image:: https://coveralls.io/repos/django-functest/django-functest/badge.svg?branch=master&service=github
:target: https://coveralls.io/github/django-functest/django-functest?branch=master

.. image:: https://readthedocs.org/projects/pip/badge/?version=latest
:target: https://django-functest.readthedocs.org/en/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
<http://django-functest.readthedocs.io/en/latest/installation.html#dependencies>`_
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
<http://webtest.pythonpaste.org/en/latest/>`_ and `Selenium
<https://pypi.python.org/pypi/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
<https://www.wolfandbadger.com/>`_ 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):
# Abstract class, doesn't inherit from TestCase

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(ContactTestBase, FuncWebTestMixin, TestCase):
pass

class ContactSeleniumTest(ContactTestBase, 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
<http://webtest.pythonpaste.org/en/latest/>`_ and `django-webtest
<https://pypi.python.org/pypi/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=...``, or, in the case of using tox::

TEST_FIREFOX_BINARY=... tox


Credits
-------

This library was built by developers at `Wolf & Badger
<https://www.wolfandbadger.com/>`_, released with the kind permission of that
company.

Tools used in rendering this package:

* Cookiecutter_
* `cookiecutter-djangopackage`_

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`cookiecutter-djangopackage`: https://github.com/pydanny/cookiecutter-djangopackage




History
-------

1.0.2
+++++

* Fixes to cope with WebTest 2.0.28. We now require django-webtest 1.9.2 or
later, and only test against the latest WebTest.
* Fixed some deprecation warnings

1.0.1
+++++

* Fixed incompatibility with django-webtest 1.9.0 and later

1.0
+++

* Added Django 1.11 support.
* Dropped official Django 1.7 support (may still work).

0.2.1
+++++

* Made :meth:`~django_functest.FuncCommonApi.get_literal_url` accept
absolute URLs for Selenium (WebTest already worked by accident).

0.2.0
+++++

* Added :meth:`~django_functest.FuncCommonApi.new_browser_session` and
:meth:`~django_functest.FuncCommonApi.switch_browser_session` to the common
API. These can be used to simulate multiple devices or users accessing the
site. See the docs for important usage information.

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 :meth:`~django_functest.FuncSeleniumMixin.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.


Release History

Release History

This version
History Node

1.0.2

History Node

1.0.1

History Node

1.0

History Node

0.2.1

History Node

0.2.0

History Node

0.1.9

History Node

0.1.8

History Node

0.1.7

History Node

0.1.6

History Node

0.1.5

History Node

0.1.4

History Node

0.1.3

History Node

0.1.2

History Node

0.1.1

History Node

0.1.0

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
django_functest-1.0.2-py2-none-any.whl (38.5 kB) Copy SHA256 Checksum SHA256 py2 Wheel Aug 16, 2017
django_functest-1.0.2-py3-none-any.whl (38.5 kB) Copy SHA256 Checksum SHA256 py3 Wheel Aug 16, 2017
django-functest-1.0.2.tar.gz (49.7 kB) Copy SHA256 Checksum SHA256 Source Aug 16, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting