[英]Can params passed to pytest fixture be passed in as a variable?
我有兩個簡單的測試設置,我試圖將它們組合在一個夾具中,並希望測試功能將'params'傳遞給夾具。
這是一個人為的例子,用來解釋我的問題。 說我有以下pytest夾具:
@pytest.fixture(scope="module", params=['param1','param2'])
def myFixture(request):
if request.param == 'param1':
p = 5
elif request.param == 'param2':
p = 10
return p
# would like to set request.param = ['param1'] for myFixture
def test_madeup(myFixture):
assert myFixture == 5
# would like to set request.param = ['param2'] for myFixture
def test_madeup2(myFixture):
assert myFixture == 10
我可以這樣做,以便上面的參數作為test_madeup
函數的輸入test_madeup
? 所以,如下所示:
@pytest.fixture(scope="module", params=fixtureParams)
def myFixture(request):
if request.param == 'param1':
return 5
elif request.param == 'param2':
return 10
def test_madeup(myFixture, ['param1']):
assert myFixture == 5
當然,上述內容不起作用。 真實情況有點復雜,但我只是想知道我是否可以將params=['param1','param2']
從test_madeup
函數傳遞給fixture。
如果我正確理解你的問題,你基本上想要選擇參數化夾具的一個實例來執行測試,通過提供測試的一些信息。 盡管我們可能想到一種機制,但這是不可能的。 我不確定以下解決方案是否映射到您的整個問題,但這是解決上述具體情況的一種方法:
import pytest
@pytest.fixture(scope="module")
def myFixture1():
return 5
@pytest.fixture(scope="module")
def myFixture2():
return 2
@pytest.fixture(scope="module", params=["param1", "param2"])
def myFixture(request):
if request.param == 'param1':
return request.getfuncargvalue("myFixture1")
elif request.param == 'param2':
return request.getfuncargvalue("myFixture2")
def test_1(myFixture1):
assert myFixture1 == 5
def test_2(myFixture2):
assert myFixture2 == 2
def test_all(myFixture):
assert myFixture in (2,5)
這會運行四個測試,因為test_all
會在兩個燈具中執行兩次。
如果你的燈具設置不重,你可能還有一個燈具可以產生一個列表和一個“迭代”參數化的燈具。 然后,測試可以獲取整個列表並將其編入索引。
不確定這是否是您想要的,但示例案例可以實現如下:
@pytest.mark.parametrize(('param', 'expected'), [('param1', 5), ('param2', 10)])
def test_madeup(param, expected):
assert param == expected
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.