来自命令行和固定装置的数据库详细信息的pytest



我试图通过从命令行传递的值初始化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文件的创建(。

最新更新