gpt4 book ai didi

python - 如何从 pytest 固定装置正确返回列表以用于参数化?

转载 作者:行者123 更新时间:2023-12-03 17:13:42 25 4
gpt4 key购买 nike

我正在尝试构建一个小的 pytest 测试,以确保 redis 中存在所有预期的键。我有一个预期键列表,我将其存储为 YML 文件。测试本身将查询 redis 以确保列表中的每个预期键都存在。

最初,我将此设置为 test_keys.py 中的一个巨大列表。文件。这是这样设置的:

expected_keys = ['key1','key2','key3']
@pytest.mark.parametrize('expected_key', expected_keys)
def test_expected_key(expected_key):
...

这有效。由于我想为 redis 环境的其他一些检查复制这种类型的测试,因此我不想将包含几百个键的多个列表放入这些文件中。

我想我可以将它们提取到 YML 文件中并通过装置加载键。

我的 fixture 看起来像这样:
@pytest.fixture
def expected_keys_fixture():
with open('expected_keys.yml'), 'r') as f:
return yaml.safe_load(f)['keys']

YML 看起来像这样:
keys:
- key1
- key2
- key3

我的测试装饰器更改为:
@pytest.mark.parametrize("expected_keys", [
(pytest.lazy_fixture('expected_keys_fixture'))
])
def test_expected_key(expected_key):
...

我正在使用 pytest-lazy-fixture 为此打包。

我在这里遇到的问题是 expected_keys现在等于预期键的整个列表。当静态列表在我的测试文件中时,它不再是每个单独的 key 。

我试图像 Oleh Rybalchenko 那样做 answer建议
@pytest.mark.parametrize("expected_keys", pytest.lazy_fixture('expected_keys_fixture')
)
def test_expected_key(expected_key):
...

但是,这失败了 TypeError: 'LazyFixture' object is not iterable .

我知道我只有一个 argname 并且我应该有一个列表,但是文档中的示例将参数传递给 fixture()装饰者。我不是。我的列表是由 YML 文件的结果生成的。

问题:我如何调整我的装置,以便它一次为 parametrize 正确返回一个项目装饰师?

最佳答案

在同样的情况下,我发现的唯一方法是拒绝 fixture 并直接调用函数。

def expected_keys_fixture():
with open('expected_keys.yml', 'r') as f:
return yaml.safe_load(f)['keys']


@pytest.mark.parametrize("expected_key",
expected_keys_fixture())
def test_expected_key(expected_key):
assert expected_key in ['key1', 'key2', 'key3']

关于python - 如何从 pytest 固定装置正确返回列表以用于参数化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56672179/

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