我正在探索py.test中的灯具,我对一年多前提出的问题提出了类似的问题:Can params passed to pytest fixture be passed in as a variable? 我想知道现在是否可以在较新版本的py.test中以某种方式选择一个params的子集来要求一个夹具功能。
假设我有一个简单的功能和测试:
def func(a, b):
return (a - b)**3 + 10
@pytest.fixture(scope="module", params=[(7,11), (7,0), (3,0)])
def fix_func(request):
output = func(*request.param)
return output
def test_1(fix_func):
assert fix_func <= 500
现在我想为param =(7,11)添加第二个测试:
def test_2(fix_func):
assert fix_func > 0
如果仍然无法选择params的子集,另一种解决此问题的方法可能是将params从fixture转移到测试,类似:
@pytest.fixture(scope="module")
def fix_func(request, param):
output = func(*param)
return output
@pytest.mark.parametrize("arg", [(7,11), (7,0), (3,0)])
def test_1(fix_func(arg)):
assert fix_func <= 500
@pytest.mark.parametrize("arg", [(7,11)])
def test_2(fix_func(arg)):
assert fix_func > 0
但这个例子也不起作用。 如果有任何其他短/&#34;优雅&#34;如何为不同的测试使用不同的灯具组(只写一个灯具功能)?
答案 0 :(得分:1)
您无法在定义的参数内嵌套函数调用以获取另一个函数的签名。你需要将内部函数移动到外部函数并在那里调用它:
@pytest.mark.parametrize("arg", [(7,11), (7,0), (3,0)])
def test_1(arg):
assert fix_func(arg) <= 500