Как правильно вернуть список из прибора Pytest для использования в параметризации? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь создать небольшой тест 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-файлы и загрузить ключи с помощью приборов.

Мой прибор выглядит так:

@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 теперь равен всему списку ожидаемых ключей.Это не каждый отдельный ключ, как у меня со статическим списком, который был в моем тестовом файле.

Я пытался сделать так, как Олег Рыбальченко ответ предложил

@pytest.mark.parametrize("expected_keys", pytest.lazy_fixture('expected_keys_fixture')
)
def test_expected_key(expected_key):
    ...

Но это не работает с TypeError: 'LazyFixture' object is not iterable.

Я понимаю, что у меня только один аргумент и у меня должен быть список, но пример в документации передает параметры декоратору fixture().Не я.Мой список создается по результатам файла YML.


Вопрос: Как настроить прибор так, чтобы он правильно возвращал один элемент за раз для parametrize декоратора?

...