Python 向fixture函数传递参数或参数

Python 向fixture函数传递参数或参数,python,pytest,Python,Pytest,我正在py.test中探索装置,我有一个类似于一年多前提出的问题: 我想知道,在py.test的较新版本中,是否可以以某种方式选择请求fixture函数的参数子集 假设我有一个简单的函数和一个测试: 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(*

我正在py.test中探索装置,我有一个类似于一年多前提出的问题: 我想知道,在py.test的较新版本中,是否可以以某种方式选择请求fixture函数的参数子集

假设我有一个简单的函数和一个测试:

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
如果仍然无法选择参数的子集,则解决此问题的另一种方法可能是将参数从夹具移动到测试,如下所示:

@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 
@pytest.fixture(scope=“module”)
def fix_func(请求,参数):
输出=函数(*param)
返回输出
@pytest.mark.parametize(“arg”,[(7,11),(7,0),(3,0)])
def测试_1(修复函数(arg)):
断言fix_func 0
但是这个例子也不起作用。
如果有任何其他简短/优雅的方法来为不同的测试使用不同的装置集(只编写一个装置函数)?

您不能在为另一个函数的签名定义的参数内嵌套函数调用。您需要将内部函数移到外部函数中,并在那里调用它:

@pytest.mark.parametrize("arg", [(7,11), (7,0), (3,0)])
def test_1(arg):
    assert fix_func(arg) <= 500
@pytest.mark.parametrize(“arg”、[(7,11)、(7,0)、(3,0)])
def测试_1(arg):

assert fix_func(arg)恐怕这个版本也不能用于fixture。只有当fix_func是一个普通函数时,它才起作用。我猜在这种情况下可能不可能使用fixture函数…这个建议是正确的,你应该在测试函数中调用被测试函数,而不是在fixture中。
@pytest.mark.parametrize("arg", [(7,11), (7,0), (3,0)])
def test_1(arg):
    assert fix_func(arg) <= 500