2017-09-14 108 views
4

我目前用單一夾具這樣運行的測試相同的測試:運行在兩個不同的燈具

@pytest.fixture() 
def foo(): 
    return 'foo' 


def test_something(foo): 
    # assert something about foo 

現在我創建一個略有不同的夾具,說

@pytest.fixture 
def bar(): 
    return 'bar' 

我需要對第二個燈具重複完全相同的測試。如何在不復制/粘貼測試並更改參數名稱的情況下做到這一點?

+1

我無法理解細節,但看起來好像有用:https://docs.pytest.org/en/latest/parametrize.html#basic-pytest-generate -tests-example – wim

+0

@wim看起來它可能適合我的目的。感謝您的鏈接。 –

回答

1

除了測試代,您可以爲任何數量的動態應用的子夾具實現「夾具方式」。爲此,定義實際的夾具被用作一個參數:

@pytest.fixture 
def arg(request): 
    return request.getfuncargvalue(request.param) 

的定義與上午間接參數化(在PARAM NAME arg和夾具名稱arg必須匹配)的測試:

@pytest.mark.parametrize('arg', ['foo', 'bar'], indirect=True) 
def test_me(arg): 
    print(arg) 

讓我們也來定義這些我們指的是燈具:

@pytest.fixture 
def foo(): 
    return 'foo' 

@pytest.fixture 
def bar(): 
    return 'bar' 

觀察如何很好地參數化,並確定這些測試包括:

$ pytest test_me.py -s -v -ra 
collected 2 items                     

test_me.py::test_me[foo] foo 
PASSED 
test_me.py::test_me[bar] bar 
PASSED 
相關問題