There are a couple of different ways Django settings can be provided for the tests.
The environment variableDJANGO_SETTINGS_MODULE
Running the tests with DJANGO_SETTINGS_MODULE
defined will find the Django settings the same way Django does by default.
Example:
$ export DJANGO_SETTINGS_MODULE=test.settings $ pytest
or:
$ DJANGO_SETTINGS_MODULE=test.settings pytestCommand line option
--ds=SETTINGS
Example:
$ pytest --ds=test.settings
pytest.ini
settings
Example contents of pytest.ini:
[pytest] DJANGO_SETTINGS_MODULE = test.settings
pyproject.toml
settings
Example contents of pyproject.toml:
[tool.pytest.ini_options] DJANGO_SETTINGS_MODULE = "test.settings"Order of choosing settings
The order of precedence is, from highest to lowest:
The command line option --ds
The environment variable DJANGO_SETTINGS_MODULE
The DJANGO_SETTINGS_MODULE
option in the configuration file - pytest.ini
, or other file that Pytest finds such as tox.ini
or pyproject.toml
If you want to use the highest precedence in the configuration file, you can use addopts = --ds=yourtestsettings
.
There is support for using django-configurations.
To do so configure the settings class using an environment variable, the --dc
flag, pytest.ini
option DJANGO_CONFIGURATION
or pyproject.toml
option DJANGO_CONFIGURATION
.
Environment Variable:
$ export DJANGO_CONFIGURATION=MySettings $ pytest
Command Line Option:
INI File Contents:
[pytest] DJANGO_CONFIGURATION=MySettings
pyproject.toml File Contents:
[tool.pytest.ini_options] DJANGO_CONFIGURATION = "MySettings"Using
django.conf.settings.configure()
In case there is no DJANGO_SETTINGS_MODULE
, the settings
object can be created by calling django.conf.settings.configure()
.
This can be done from your project’s conftest.py
file:
from django.conf import settings def pytest_configure(): settings.configure(DATABASES=...)Overriding individual settings
Settings can be overridden by using the settings
fixture:
@pytest.fixture(autouse=True) def use_dummy_cache_backend(settings): settings.CACHES = { "default": { "BACKEND": "django.core.cache.backends.dummy.DummyCache", } }
Here autouse=True is used, meaning the fixture is automatically applied to all tests, but it can also be requested individually per-test.
Changing your app before Django gets set uppytest-django calls django.setup()
automatically. If you want to do anything before this, you have to create a pytest plugin and use the pytest_load_initial_conftests()
hook, with tryfirst=True
, so that it gets run before the hook in pytest-django itself:
@pytest.hookimpl(tryfirst=True) def pytest_load_initial_conftests(early_config, parser, args): import project.app.signals def noop(*args, **kwargs): pass project.app.signals.something = noop
This plugin can then be used e.g. via -p
in addopts
.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4