参数化pytest fixture的输出

时间:2016-04-14 03:00:10

标签: python pytest

我想参数化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)

然后当我运行以下内容时:

py.test test_param.py 

只有夹具2的第一次迭代才能为夹具1中的每个参数传递。我如何参数化fixture_2的输出,以便for循环中的每次迭代都传递给test_params函数?

编辑:假设第二个灯具不能以与第一个相同的方式进行参数化,因为在实际问题中,第二个参数的输出取决于第一个灯具的输入。

1 个答案:

答案 0 :(得分:0)

您正在使用从灯具功能返回的return

为什么不像第一个灯具那样参数化第二个灯具?

# 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)