我有一些固定装置conftest.py
在实际测试功能中运行良好。但是,我想使用参数化一些测试pytest_generate_tests()
基于其中一些装置的数据。
我想做的(简化):
-- conftest.py --
# my fixture returns a list of device names.
@pytest.fixture(scope="module")
def device_list(something):
return ['dev1', 'dev2', 'dev3', 'test']
-- test001.py --
# generate tests using the device_list fixture I defined above.
def pytest_generate_tests(metafunc):
metafunc.parametrize('devices', itertools.chain(device_list), ids=repr)
# A test that is parametrized by the above function.
def test_do_stuff(devices):
assert "dev" in devices
# Output should/would be:
dev1: pass
dev2: pass
dev3: pass
test: FAIL
当然,我遇到的问题是pytest_generate_tests()
,它抱怨说device_list
未定义。如果我尝试传递它,pytest_generate_tests(metafunc, device_list)
,我收到错误。
E pluggy.callers.HookCallError: hook call must provide argument 'device_list'
我想这样做的原因是我使用它device_list
列出不同文件中的一堆不同测试,所以我想使用pytest_generate_tests()
使用相同的列表参数化测试。
这是不可能的吗?使用有什么意义pytest_generate_tests()
如果我必须在该函数内复制我的装置?
根据我多年来收集的信息,固定装置与 pytest 的收集后阶段紧密耦合。我曾多次尝试做类似的事情,但从未真正成功。
相反,您可以创建一个函数来完成您的装置将要做的事情,并在generate_tests挂钩内调用它。然后,如果您仍然需要它作为固定装置,请再次调用它(或保存结果或其他)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)