gpt4 book ai didi

python - py.test : Get expected values for test functions for different fixtures from configuration

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:35 25 4
gpt4 key购买 nike

我想使用 py.test 设置测试,使用两个(或更多)固定装置针对我的项目中的不同级别。对于每个 fixture ,我想执行不同的测试函数,这些函数将根据用于测试的 fixture 通过参数获取预期值。

这就是我想做的:

def getGroups(boardstr, xlen, ylen):
board = Board(boardstr, xlen, ylen)
groups = MyClass.findGroups(board.get_field())
return groups

@pytest.fixture(scope='module')
def groups_3():
# ... setup for level 3
return getGroups(boardstr, xlen, ylen)

@pytest.fixture(scope='module')
def groups_10():
# ... setup for level 10
return getGroups(boardstr, xlen, ylen)

# this is my test data, which i want to use
expected_values = {
"groups_3": {
"test_total_groups": 9,
"test_total_clickable_groups": 5,
"test_total_colors": 3
},
"groups_10": {
"test_total_groups": 22,
"test_total_clickable_groups": 7,
"test_total_colors": 3
},
}

# "groups" shall be the fixture for the following test functions
# and the test methods shall be executed with groups_3 and groups_10 as fixture
def test_total_groups(groups, expected):
assert len(groups) == expected

def test_total_clickable_groups(groups, expected):
assert len([grp for grp in groups if grp.clickable is True]) == expected

def test_total_colors(groups, expected):
assert len(np.unique([grp.color for grp in groups])) == expected

有没有办法使用 py.test 来实现这一点?通过使用参数化功能可以实现这一点吗?

我尝试了一些变体,例如:

@pytest.mark.parametrize("groups, expected", [
(groups_3(), 5),
(groups_10(), 7),
])
def test_total_clickable_groups(groups, expected):
assert len([grp for grp in groups if grp.clickable is True]) == expected

但是我没有成功。

最佳答案

也许这对某人有用。我找到了一种方法(受到 holgerkrekel.net/2009/05/13/parametrizing-python-tests-generalized/ 的启发):

def getGroups(boardstr, xlen, ylen):
board = Board(boardstr, xlen, ylen)
groups = MyClass.findGroups(board.get_field())
return groups

def groups_3():
# ... setup for level 3
return getGroups(boardstr, xlen, ylen)

def groups_10():
# ... setup for level 10
return getGroups(boardstr, xlen, ylen)

# decorator function
def params(funcarglist):
def wrapper(function):
function.funcarglist = funcarglist
return function
return wrapper

def pytest_generate_tests(metafunc):
# called once per each test function
for funcargs in getattr(metafunc.function, 'funcarglist', ()):
# schedule a new test function run with applied **funcargs
metafunc.addcall(funcargs=funcargs)

class TestClass:

groups_3 = groups_3()
groups_10 = groups_10()

@params([dict(g=groups_3, e=9),
dict(g=groups_10, e=22)])
def test_total_groups(self, g, e):
assert len(g) == e


@params([dict(g=groups_3, e=5),
dict(g=groups_10, e=7)])
def test_total_clickable_groups(self, g, e):
assert len([grp for grp in g if grp.clickable is True]) == e


@params([dict(g=groups_3, e=3),
dict(g=groups_10, e=3)])
def test_total_colors(self, g, e):
assert len(np.unique([grp.color for grp in g])) == e

关于python - py.test : Get expected values for test functions for different fixtures from configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24022616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com