2016-04-14 16 views
0

Ich möchte den Ausgang eines Pytest Fixture parametrisieren. Zum Beispiel, sagen wir, ich habe zwei Befestigungen:parametrieren Ausgang von Pytest Fixture

# contents of test_param.py 
import pytest 

@pytest.fixture(params=[1,2]) 
def fixture_1(request): 
    return request.param 

@pytest.fixture 
def fixture_2(fixture_1): 
    for num in range(5): # the output here should be parametrized 
     return '%d_%s' % (fixture_1, num) # but only returns first iteration 

def test_params(fixture_2): 
    print (fixture_2) 
    assert isinstance(fixture_2, str) 

Dann, wenn ich laufen die folgenden:

py.test test_param.py 

Nur die erste Iteration von Halterung 2 für jeden param im Vorrichtungsbau 1. geben wird Wie kann ich parametriere die Ausgabe von fixture_2 so, dass jede Iteration in der for-Schleife an die Funktion test_params übergeben wird?

Edit: Nehmen wir an, das zweite Fixture kann nicht auf die gleiche Weise wie das erste Fixture parametrisiert werden, da im realen Problem die Ausgabe des zweiten Parameters von der Eingabe des ersten Fixtures abhängt.

Antwort

0

Sie verwenden return, die von der Fixture-Funktion zurückgegeben wird.

Warum parametrieren Sie das zweite Gerät nicht genau wie das erste?

# contents of test_param.py 
import pytest 

@pytest.fixture(params=[1,2]) 
def fixture_1(request): 
    return request.param 

@pytest.fixture(params=list(range(5))) 
def fixture_2(fixture_1, request): 
    return '%d_%s' % (fixture_1, request.param) 

def test_params(fixture_2): 
    print (fixture_2) 
    assert isinstance(fixture_2, str) 
+0

In diesem Beispiel würde es funktionieren, aber was ist, wenn die Ausgabe der zweiten von der Eingabe von der ersten abhängt? In dem Test, an dem ich gerade arbeite, gibt das erste Fixture ein Verzeichnis und das zweite eine Untermenge der Dateien im Verzeichnis zurück. – derchambers

+0

py.test unterstützt derzeit keine abhängige Parametrisierung – Ronny