Pytest-从另一个灯具调用灯具

问题描述 投票:0回答:2

我有一个夹具来返回某种类型的对象,并且我在另一个文件中定义了另一个夹具,该文件基本上使用该对象来做其他事情。但是我无法从我的第一个固定装置归还该对象。

file-1

def fixture_1(s, **kwargs):
    def hook(s, **kwargs):
        p_b = s.get()
        p = p_b.build()
        yield p
    return hook

file-2 conftest.py

@pytest.fixture(scope='module')
def fixture_1(s, **kwargs):
    def hook(s, **kwargs):
        #Default implementation is no-op.
        pass
    return hook

@pytest.fixture(scope='module')
def fixture_2(s,b_p):
    some_p = fixture_1(s)
    current_status = s.start(some_p)

    print(current_status)
    yield current_status

我想基本上检索p file-1中返回的对象fixture_1,并在file-2 fixture_2固定装置中使用它。

python pytest fixtures
2个回答
0
投票

有什么办法吗?我有同样的问题,它看起来像夹具链。请参阅此问题:https://github.com/pytest-dev/pytest/issues/5970


0
投票

似乎您使用的pytest固定装置错误(查看您的参数名称)

我强烈建议您通过https://docs.pytest.org/en/latest/fixture.html

看来您的问题有两种解决方案:

###
# file_1
def not_really_a_fixture(s, **kwargs): # just some hook generator
    def hook(s, **kwargs):
        p_b = s.get()
        p = p_b.build()
        yield p
    return hook

###
# conftest.py
from file_1 import not_really_a_fixture

@pytest.fixture(scope='module')
def fixture_2(s,b_p): # s and b_p should be names of fixtures that need to run before this
    some_p = not_really_a_fixture(s)
    current_status = s.start(some_p)

    print(current_status)
    yield current_status
###

和第二个变体

# file_1
@pytest.fixture(scope='module')
def fixture_1(s): # s is name of another fixture
    # there is no point in having **kwargs as arg in pytest fixture
    def hook(s, **kwargs):
        #Default implementation is no-op.
        pass
    return hook

###
# conftest.py
from file_1 import fixture_1

@pytest.fixture(scope='module')
def fixture_2(s,b_p,fixture_1): # s and b_p should be names of fixtures that need to run before this
    # in fixture_1 is value returned by fixture_1, that means your hook func
    current_status = s.start(fixture_1)

    print(current_status)
    yield current_status
© www.soinside.com 2019 - 2024. All rights reserved.