簡體   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