2017-11-11 4 views
4

Ich arbeite an einem Django-Mehrweg-Paket, das mit mehreren Projekten zu verwenden planen. Ich habe pytest verwendet, um Testsuite zu bauen, ich habe parametrisiert geholfen, in Pytest geholfen, einen einzelnen Test mit mehrfachen Konfiguration zu laufen.parametrieren Testen mit Django-Einstellungen

Doch würde Ich mag alle meine Tests mit unterschiedlichen Einstellungen laufen Kombinationen

available_backends = [ 
    'django_profile.auth_backends.drf.RestFramework', 
    'django_profile.auth_backends.kong.Kong', 
] 


def pytest_generate_tests(metafunc): 
    # if 'stringinput' in metafunc.fixturenames: 
    if 'auth_backend' in metafunc.fixturenames: 
     metafunc.parametrize(
      'auth_backend', 
      available_backends 
     ) 


@pytest.fixture(params=['auth_backend', ]) 
def auth_backend(request, settings): 
    settings.DJANGO_PROFILE_AUTH_BACKEND = request.auth_backend 
    return settings 

ich mit dem obigen Ansatz experimentiert, aber das bedeutet auch, muss ich auth_backend zu jedem Testfall hinzuzufügen, ich weiß nicht glaube, das ist ideal. Kann mir jemand einen Weg empfehlen, alle meine Tests mit verschiedenen Einstellungskombinationen durchzuführen?

Grüße

Antwort

2

Bitte haben Sie versucht:

  • Code zu verwenden, in conftest.py mit scope = "Sitzung"
  • Verwendung available_backends Liste direkt in params = statt pytest_generate_tests

https://docs.pytest.org/en/latest/fixture.html#parametrizing-fixtures

wenn nicht, Sie könnten versuchen, dies mit:

@pytest.fixture(scope='session', params=[ 
    'django_profile.auth_backends.drf.RestFramework', 
    'django_profile.auth_backends.kong.Kong', 
]) 
def auth_backend(request, settings): 
    settings.DJANGO_PROFILE_AUTH_BACKEND = request.param 
    yield settings 
+0

Nicht wirklich, das macht den Job nicht und es wird weiterhin alle Tests benötigen, um auth_backend Parameter zu übergeben –

0

Schließlich ich eine Möglichkeit, verschiedene Einstellungen für alle Tests bestanden gefunden, ohne dass das Gerät in jedem Test angeben. Unten ist ein funktionierendes Beispiel

# conftest.py 
@pytest.yield_fixture(params=available_backends) 
def settings(request, settings): 
    if request.param not in available_backends: 
     raise ValueError('auth_backend {} not implemented.'.format(request.param)) 
    wrapper = SettingsWrapper() 
    settings.DJANGO_PROFILE_AUTH_BACKEND = request.param 
    yield wrapper 
    wrapper.finalize() 

# setup.cfg 
usefixtures = settings