创建依赖于其他参数化测试夹具的参数化测试夹具?

时间:2017-11-02 15:10:43

标签: pytest

我想做这样的事情

def foo_bar(a, b):
    """ The function I want to test """
    return ...

def subparams(a):
   return [some stuff based on what a is]

@pytest.fixture(scope='module', params=('foo', 'bar'))
def a(request):
    # lengthy setup based on request.param
    yield request.param
    # teardown

@pytest.fixture(params=subparams(a))
def b(request):
    return request.param

def test_foo_bar(a, b):
    result = foo_bar(a, b)
    assert <something about result>

换句话说,我有一个参数化的夹具a,只需要它 正常的参数列表。对于a的每个值,我也有一个函数 subparams用于生成相关参数b。为了论证,让我们说subparams按照以下方式实施

def subparams(a):
    return [1, 2, 3] if a == 'foo' else [4, 5]

在这种情况下,我希望使用以下内容调用test_foo_bar

  • 'foo', 1
  • 'foo', 2
  • 'foo', 3
  • 'bar', 4
  • 'bar', 5

不幸的是,@pytest.fixture(params=subparams(a))位不起作用,因为此时a仍然只是一个函数,而不是基于a参数化的实例化。我如何实现test_foo_bar调用ab这些a需要很长时间才能设置的组合的效果(因此{{1}根据{{​​1}}?

参数化{}}和scope='module'

0 个答案:

没有答案