Используйте значения списка pytest.lazy_fixture в качестве параметров в другом приборе - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь использовать список значений одного прибора в качестве параметров другого.Вот мои настройки:

import pytest

d = {
    "first": [1, 2, 3],
    "second": [4, 5, 6]
}

@pytest.fixture(params=['first', 'second'])
def foo(request):
    return d.get(request.param)

@pytest.fixture(params=[pytest.lazy_fixture('foo')])
def bar(request):
    return request.param

def test_1(bar):
    pass

Проблема в том, что bar() всегда получают полный список как request.param ([1, 2, 3] не значения списка. Если в params из bar() Fixture отправляет данные напрямую, например:

@pytest.fixture(params=[1, 2, 3])
def bar(request):
    return request.param

def test_1(bar):
    pass

Тогда запрос аргумента будет работать правильно (тест запускается три раза). Та же ситуация, если я передаю аргументы params не напрямую, а из любого метода бездекоратор прибора, то есть:

def some():
    return [1, 2, 3]

@pytest.fixture(params=some())
def more(request):
    return request.param

def test_2(more):
    logging.error(more)
    pass

Итак, мой вопрос, возможно ли получить данные из списка один за другим, а затем использовать их в моем тесте? Я пытаюсь «разобрать» список:

@pytest.fixture(params=[i for i in i pytest.lazy_fixture('foo')])
def bar(request):
    return request.param

Но в этом случае я получаю TypeError: 'LazyFixture' object is not iterable

...