django-smoke-tests 2.1.0
Automatic smoke tests for Django project.
License: MIT
Keywords: django-smoke-tests,test,smoke

==================
django-smoke-tests
==================

.. image:: https://badge.fury.io/py/django-smoke-tests.svg
    :target: https://badge.fury.io/py/django-smoke-tests

.. image:: https://github.com/kamilkijak/django-smoke-tests/actions/workflows/actions-run-tests.yml/badge.svg?branch=master
    :target: https://github.com/kamilkijak/django-smoke-tests/actions/workflows/actions-run-tests.yml

.. image:: https://codecov.io/gh/kamilkijak/django-smoke-tests/branch/master/graph/badge.svg
    :target: https://codecov.io/gh/kamilkijak/django-smoke-tests

Django command that finds all endpoints in project, executes HTTP requests against them and checks if there are any unexpected responses.

.. image:: https://i.imgur.com/cPK0y3W.gif

.. _contents:

.. contents::

Requirements
------------

- Python (3.7, 3.8, 3.9, 3.10)
- Django (2.2 LTS, 3.2 LTS)

Installation
------------
Install using pip::

    pip install django-smoke-tests


Add it to your ``INSTALLED_APPS``:

.. code-block:: python

    INSTALLED_APPS = (
        ...
        'django_smoke_tests',
        ...
    )


Quickstart
----------
Execute smoke tests for the whole project::

    python manage.py smoke_tests


Usage
-----

Parameters
~~~~~~~~~~
::

    $ python manage.py smoke_tests --help
    usage: manage.py smoke_tests [-h] [--http-methods HTTP_METHODS]
                                 [--allow-status-codes ALLOW_STATUS_CODES]
                                 [--disallow-status-codes DISALLOW_STATUS_CODES]
                                 [--settings SETTINGS]
                                 [--configuration CONFIGURATION]
                                 [--fixture FIXTURE] [--no-migrations] [--no-db]
                                 [app_names]

    Smoke tests for Django endpoints.

    positional arguments:
      app_names             names of apps to test

    optional arguments:
      -h, --help            show this help message and exit
      --http-methods HTTP_METHODS
                            comma separated HTTP methods that will be executed for
                            all endpoints, eg. GET,POST,DELETE
                            [default: GET,POST,PUT,DELETE]
      -g, --get-only        shortcut for --http-methods GET
      --allow-status-codes ALLOW_STATUS_CODES
                            comma separated HTTP status codes that will be
                            considered as success responses, eg. 200,201,204;
                            404 is allowed by default for detail URLs (paths with parameters)
                            [default: 200,201,301,302,304,405]
      --disallow-status-codes DISALLOW_STATUS_CODES
                            comma separated HTTP status codes that will be
                            considered as fail responses, eg. 404,500
      --settings SETTINGS   path to the Django settings module, eg.
                            myproject.settings
      --configuration CONFIGURATION
                            name of the configuration class to load, eg.
                            Development
      --fixture FIXTURE     Django fixture JSON file to be loaded before executing
                            smoke tests
      --no-migrations       flag for skipping migrations, database will be created
                            directly from models
      --no-db               flag for skipping database creation


Skipping tests
~~~~~~~~~~~~~~
To skip tests for specific URLs add ``SKIP_SMOKE_TESTS`` option in your settings.

This setting should contain list of URL pattern names.

.. code-block:: python

    SKIP_SMOKE_TESTS = (
        'all-astronauts',  # to skip url(r'^astronauts/', AllAstronauts.as_view(), name='all-astronauts')
        'missions:all-launches',  # to skip 'all-launches' from 'missions' app
    )


Reporting bugs
--------------
If you face any problems please report them to the issue tracker at https://github.com/kamilkijak/django-smoke-tests/issues

Contributing
-------------

Running Tests
~~~~~~~~~~~~~~
Does the code actually work?

::

    source <YOURVIRTUALENV>/bin/activate
    (myenv) $ pip install tox
    (myenv) $ tox

Credits
-------

Tools used in rendering this package:

*  Cookiecutter_
*  `cookiecutter-djangopackage`_

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