2017-06-14 7 views
0

Ich teste einige technische Gleichungen mit mehreren Parametern, die Arrays von Schwimmern zurückgeben. Um alle Fälle zu testen, möchte ich eine Reihe von Fixtures verwenden. Ich speichere die Testfälle derzeit in einer einfachen Datei, lade sie und gebe dann den interessierenden Testfall zurück. Gibt es einen besseren Weg, dies zu tun?Produzieren mehrere pytest Fixtures

@pytest.fixture(params=[0, 1, 2]) 
def test_case(request): 
    fpath = pathlib.Path(__file__).parent 
    fpath /= 'test_data'/'test_cases.json' 
    test_cases = json.load(fpath.open()) 
    return test_cases[request.param] 

def test_function(test_case): 
    # Run the test 
+0

Ich bin mir nicht sicher, ob ich die Frage verstanden habe. Warum nicht nur die Arrays in der Python-Datei inline? – nitzpo

+0

Weil die Daten in der Python-Datei ziemlich komplex sind – arkottke

+0

Sie meinen die JSON-Datei? Wenn ja, und Sie müssen die Daten in JSON-Dateien zu halten, dann ist dies so ziemlich alles. Sie können diesen Code leicht verbessern, indem Sie zum Beispiel den 'pytest_generate_tests'-Hook verwenden, um das Verzeichnis zu durchsuchen und Tests für jede Datei dort auszuführen. Auf diese Weise werden Sie beim Erstellen einer neuen JSON-Datei automatisch zu den Tests hinzugefügt. – nitzpo

Antwort

0

Sie können pytest_generate_tests verwenden.

def pytest_generate_tests(metafunc): 
    if 'test_case' in metafunc.fixturenames: 
     fpath = pathlib.Path(__file__).parent 
     fpath /= 'test_data'/'test_cases.json' 
     test_cases = json.load(fpath.open()) 
     metafunc.fixturenames.append('test_case') 
     metafunc.parametrize(
      'test_case', 
      test_cases) 
+0

Aber in der Tat wird es nichts verbessern. Könnten Sie klären, warum genau Sie wollen "besserer Weg", was ist los mit Ihrem Ansatz? – MasterAndrey

+0

Ich war nur auf der Suche nach Möglichkeiten, meinen Ansatz/Stil zu verbessern. Ich konnte keine Dokumentation über das Generieren mehrerer Tests finden, wie ich es bin, also dachte ich, ich könnte über das Problem falsch nachdenken. – arkottke

Verwandte Themen