2016-10-20 5 views
0

Ich versuche parametrisierte Tests zu verschachteln. Der folgende Code tut es, aber ich will nur den Code auf param1 auszuführen, wenn sie sich ändert („print param1“ ist zeitaufwendig)Verschachtelte parametrisierte Tests (Pytest)

@pytest.mark.parametrize("param3", ["p31", "p32"]) 
@pytest.mark.parametrize("param2", ["p21", "p22"]) 
@pytest.mark.parametrize("param1", ["p11", "p12"]) 
def test_one(param1, param2, param3): 
    print param1 # goal is to run this only when param1 changes 
    print param2, param3 

Ich versuchte dies, aber es scheint nicht zu funktionieren:

@pytest.mark.parametrize("param1", ["p11", "p12"]) 
def test_one(param1, param2, param3): 
    print param1 # goal is to run this only when param1 changes 
    @pytest.mark.parametrize("param3", ["p31", "p32"]) 
    @pytest.mark.parametrize("param2", ["p21", "p22"]) 
    def test_two(param2, param3): 
     print param2, param3 

Hat jemand eine Idee?

Antwort

1

gab mir ein Kollege eine Lösung:

@pytest.fixture(scope="class", params=["B1","B2"]) 
def two(request): 
    print "\n SETUP", request.param 
    yield request.param 
    #print "\n UNDO", request.param 

@pytest.fixture(scope="class", params=["A1", "A2"]) 
def one(request): 
    print "\n SETUP", request.param 
    yield request.param 
    #print "\n UNDO", request.param 

class Test_myclass(): 
    @pytest.mark.parametrize("param4", ["D1", "D2"]) 
    @pytest.mark.parametrize("param3", ["C1", "C2"]) 
    def test_three(self, one, two, param3, param4): 
     print "\n ({0} {1}) RUN ".format(one, two), param3, param4, 
Verwandte Themen