簡體   English   中英

傳遞給pytest fixture的params可以作為變量傳入嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM