Pytest и pytest-django: как я могу запустить каждый тест (в комплекте с настройкой и разборкой) несколько раз в разных контекстах? - PullRequest
0 голосов
/ 04 июня 2018

Я настраиваю тестовую платформу для мультитенантной системы.

Для каждого письменного теста я хочу создать тест для каждого арендатора и обернуть весь тестовый прогон, чтобы изменить соединение базы данных и некоторую локальную переменную потока перед тестом, не прерывая разбор базы данных там, где он сбрасывается.

Во время процесса проб и ошибок я прибегал к подъему все выше и выше в цепочке ловушек pytest: я начал с pytest_generate_tests, чтобы создать тест для каждого арендатора с соответствующим приспособлением, но разборка не удаласьЯ пришел к следующей идее:

def pytest_runtestloop(session):
    for tenant in range(settings.TENANTS.keys()):
        with set_current_tenant(tenant):
            with environ({'DJANGO_CONFIGURATION': f'Test{tenant.capitalize()}Config'}):
                session.config.pluginmanager.getplugin("main").pytest_runtestloop(session)

    return True

Хотя это не работает (так как django-configurations загружает настройки во время более ранней фазы pytest_load_initial_conftests), этот пример должен дать представление о том, чтоЯ пытаюсь достичь.

Большое препятствие: соединение с базой данных default должно указывать на базу данных текущего арендатора до загрузки каких-либо устройств и после запуска flush.

Я отключил механизм фиксации сеанса по умолчанию pytest-django и планирую использовать внешнюю базу данных для тестов:

@pytest.fixture(scope='session')
def django_db_setup():
    pass

У меня может быть скрипт Python-оболочки, который вызывает pytest множественныйраз с правильным конфигом, но я бы потерял много хороших инструментов.

...