我试图通过从命令行传递的值初始化pytest的db。我无法在不同的测试设置中指定值。它仅通过命令行可用。
我在confttest.py中具有额外的命令行选项,以获取数据库详细信息:
def pytest_addoption(parser):
parser.addoption(
"--dbconnection", action="store", default = "novalue", help="test db value"
)
有什么办法可以在conftest.py中访问这些值?Afaik,我可以使用固定装置在测试中获取值,但是我想覆盖django_db_modify_db_settings
以使用这些命令行参数更改数据库。
这可能吗?在处理命令行之前,数据库是否初始化?我尝试了一些实验,看起来确实如此。是否还有其他解决方法可以使此工作?
有什么办法可以在conftest.py?
中访问这些值
您可以访问所有固定装置(通过request.config
(和(大多数(挂钩Inglass中的命令行参数。
在处理命令行之前,数据库是初始化的吗?
no,在解析命令行后,数据库将在稍后初始化。命令行ARGS可以在pytest_configure
挂钩中访问,并且在django_db_setup
固定固定之前未初始化数据库连接,因此在pytest_runtest_setup
挂钩的第一次调用之前,请勿进行。
示例,从您的addopt
钩延伸:
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
将使用内存DB,运行pytest --dbconnection=infile
将使用该文件(您可以使用--reuse-db
重新运行来验证DB文件的创建(。