django-smoke-tests
django-smoke-tests copied to clipboard
Auto-generated smoke tests for a Django project :fire:
================== 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