gpt4 book ai didi

pytest - 是否可以在 pytest_generate_tests() 中使用 fixture ?

转载 作者:行者123 更新时间:2023-12-03 14:42:59 26 4
gpt4 key购买 nike

我在 conftest.py 中有一些固定装置在实际测试功能中运行良好。但是,我想使用 pytest_generate_tests() 参数化一些测试基于其中一些 fixture 中的数据。
我想做什么(简化):

-- 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() 有什么意义?

最佳答案

从我多年来收集的资料来看,fixture 与 pytest 的后期收集阶段非常紧密地耦合在一起。我已经尝试过很多次做类似的事情,但从来没有真正成功过。

相反,您可以创建一个函数来执行您的 fixture 将执行的操作,并在 generate_tests 钩子(Hook)中调用它。然后,如果您仍然需要它作为固定装置,请再次调用它(或保存结果或其他)。

关于pytest - 是否可以在 pytest_generate_tests() 中使用 fixture ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59309558/

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