Есть ли какой-либо способ, которым я могу получить доступ к этим значениям в conftest.py?
Вы можете получить доступ к аргументам командной строки во всех приборах (через request.config
) и (большинство) ловушекimpls.
Инициализирована ли база данных до обработки командной строки?
Нет, база данных инициализируется намного позже, после анализа командной строки.Аргументы командной строки становятся доступными в pytest_configure
перехватах, и соединение с базой данных не инициализируется до фиксатора django_db_setup
, то есть до первого вызова pytest_runtest_setup
перехватчиков.
Пример, расширенный из вашего addopt
hook:
import pytest
def pytest_addoption(parser):
parser.addoption(
"--dbconnection", action="store", default = "novalue", help="test db value"
)
@pytest.fixture(scope='session')
def django_db_modify_db_settings(request):
from django.conf import settings
testdb_settings = settings.DATABASES['default']['TEST']
dbconn = request.config.getoption('--dbconnection')
if dbconn == 'infile':
testdb_settings['NAME'] = '/tmp/testdb.sqlite'
elif dbconn == 'inmem':
testdb_settings['NAME'] = ':memory:'
else:
raise RuntimeError('Unknown option value.')
При запуске pytest --dbconnection=inmem
будет использоваться БД в памяти, при запуске pytest --dbconnection=infile
будет использоваться файл (вы можете повторно запустить с --reuse-db
, чтобы убедиться, что файл БД создан).