繁体   English   中英

pytest 如何通过中间夹具传递请求夹具

[英]pytest how to pass request fixture through intermediary fixture

我有(在pytest中):

  • 使用request.parambase夹具
  • 使用base夹具的intermediary夹具
  • 使用intermediary夹具的测试,我想parameterizebase夹具

下面的代码示例将有助于解释:

import pytest

@pytest.fixture
def base(request) -> int:
    return request.param

@pytest.fixture
def intermediary(base: int) -> int:
    return base

# This does not work!  "In test_something: indirect fixture 'base' doesn't exist"
@pytest.mark.parametrize("intermediary", [1], indirect=["base"])
def test_something(intermediary: int) -> None:
    assert isinstance(intermediary, int)

我的问题:如何从仅使用intermediary夹具的测试中填充base夹具的request


解决方法

在测试签名作品中包括基本夹具:

@pytest.mark.parametrize("base", [1], indirect=True)
def test_something_workaround(base: int, intermediary: int) -> None:
    assert isinstance(intermediary, int)

但是,这对我来说是不可取的,因为测试实际上并不使用base ,只使用intermediary


版本

Python==3.8
pytest==6.2.2

你几乎可以这样做,但你必须使用“base”作为parametrize中的夹具名称:

@pytest.fixture
def base(request) -> int:
    return request.param


@pytest.fixture
def intermediary(base: int) -> int:
    return base + 1


@pytest.mark.parametrize("base", [1], indirect=True)
def test_something(intermediary: int) -> None:
    assert intermediary == 2

例如,您参数化夹具base ,但使用派生夹具,然后从base获取结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM