Skip to content

kamilkijak/django-smoke-tests

Repository files navigation

django-smoke-tests

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

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

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

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

Install using pip:

pip install django-smoke-tests

Add it to your INSTALLED_APPS:

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

Execute smoke tests for the whole project:

python manage.py smoke_tests
$ 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

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

This setting should contain list of URL pattern names.

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
)

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

Does the code actually work?

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

Tools used in rendering this package:

About

Auto-generated smoke tests for a Django project 🔥

Resources

License

Stars

Watchers

Forks

Packages

No packages published