Pytest:依赖夹具的笛卡尔积

时间:2014-11-20 10:07:50

标签: fixtures pytest

想象一下以下的测试套件

import pytest

@pytest.fixture(params=1, 2, 3)
def shape(request):
    return request.param


@pytest.fixture
def data(shape):
    return shape


def test_resize(data, shape):
    pass

我有两个灯具datashapedata取决于fixture shape,并且正在为每个可能的值生成。但在test_resize我希望测试datashape的所有可能组合:

  • 1,1
  • 1,2
  • 1,3
  • 2,1

等。通过上面的实现,它不会扩展carthesian产品:

  • 1,1
  • 2,2
  • 3,3

有没有办法让py.test将灯具扩展到所有可能的组合?

1 个答案:

答案 0 :(得分:2)

正如您的输出所示,shape已参数化但data未参数化,因此每个实例的data夹具只会有一个实例shape夹具。我也会参数化data。然后,仍然让data夹具依赖于shape,您将得到您想要的产品:

import pytest

fixture_params = (1, 2, 3)

@pytest.fixture(params=fixture_params)
def shape(request):
    return request.param

@pytest.fixture(params=fixture_params)
def data(request, shape):
    print(request.param)
    return request.param

def test_resize(data, shape):
    print(data, shape)
    assert 0 and 'assert to show prints'