【发布时间】:2014-05-02 23:44:48
【问题描述】:
我正在探索 py.test 中的固定装置,我对一年多前提出的问题有类似的问题:Can params passed to pytest fixture be passed in as a variable? 我想知道现在是否可以在较新版本的 py.test 中以某种方式选择参数子集来请求固定功能。
假设我有一个简单的函数和一个测试:
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
如果仍然无法选择参数子集,解决此问题的另一种方法可能是将参数从夹具移动到测试,类似这样:
@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
但是这个例子也行不通。 如果有任何其他简短/“优雅”的方式来为不同的测试使用不同的夹具集(只编写一个夹具函数)?
【问题讨论】: