pytest中params中fixture的输出
output of fixture in params in pytest
我今天坐下来更好地学习 py.test,发现带有文档的站点已关闭 (pytest.org),所以如果在那里找到这个问题的答案,我深表歉意。
我想做的是将两个灯具的输出传递给参数化,如下所示:
import pytest
@pytest.fixture()
def make_1():
return 1
@pytest.fixture()
def make_2():
return 2
@pytest.mark.parametrize('arg', [make_1, make_2])
def test_main(arg):
assert isinstance(arg, int)
但是测试失败了,因为没有将固定装置的输出分配给参数 "arg",而是传递了固定装置(函数)本身。
如何以这种方式参数化各种灯具的输出?
这个 [ugly/massive hack] 会成功吗?我很欣赏它远非理想 - 我不知道是否有办法创建一个 lazy-evaluated 夹具,让你做你想做的事。
import pytest
@pytest.fixture
def make_1():
return 1
@pytest.fixture
def make_2():
return 2
@pytest.fixture
def all_makes(make_1, make_2):
return (make_1, make_2)
def _test_thing(make):
# Run your test
pass
def test_main(all_makes):
for make in all_makes:
try:
_test_thing(make)
except AssertionError:
print "Failed for make {}".format(make)
raise
一个可能更好的选择可能是参数化夹具本身(如果可能的话)——参考文档:https://pytest.org/latest/fixture.html#parametrizing-a-fixture
@pytest.fixture(params=[1, 2])
def make(request):
return request.param
def test_make(make):
# Run your test
pass
如果您的不同 'make' 固定装置是 super-different,您可能有类似的东西:
def build_make_1():
return 1
def build_make_2():
return 2
@pytest.fixture(params=[build_make_1, build_make_2])
def make(request):
return request.param()
def test_make(make):
# Run your test
pass
我今天坐下来更好地学习 py.test,发现带有文档的站点已关闭 (pytest.org),所以如果在那里找到这个问题的答案,我深表歉意。
我想做的是将两个灯具的输出传递给参数化,如下所示:
import pytest
@pytest.fixture()
def make_1():
return 1
@pytest.fixture()
def make_2():
return 2
@pytest.mark.parametrize('arg', [make_1, make_2])
def test_main(arg):
assert isinstance(arg, int)
但是测试失败了,因为没有将固定装置的输出分配给参数 "arg",而是传递了固定装置(函数)本身。
如何以这种方式参数化各种灯具的输出?
这个 [ugly/massive hack] 会成功吗?我很欣赏它远非理想 - 我不知道是否有办法创建一个 lazy-evaluated 夹具,让你做你想做的事。
import pytest
@pytest.fixture
def make_1():
return 1
@pytest.fixture
def make_2():
return 2
@pytest.fixture
def all_makes(make_1, make_2):
return (make_1, make_2)
def _test_thing(make):
# Run your test
pass
def test_main(all_makes):
for make in all_makes:
try:
_test_thing(make)
except AssertionError:
print "Failed for make {}".format(make)
raise
一个可能更好的选择可能是参数化夹具本身(如果可能的话)——参考文档:https://pytest.org/latest/fixture.html#parametrizing-a-fixture
@pytest.fixture(params=[1, 2])
def make(request):
return request.param
def test_make(make):
# Run your test
pass
如果您的不同 'make' 固定装置是 super-different,您可能有类似的东西:
def build_make_1():
return 1
def build_make_2():
return 2
@pytest.fixture(params=[build_make_1, build_make_2])
def make(request):
return request.param()
def test_make(make):
# Run your test
pass