gpt4 book ai didi

python - 如何跨 pytest 装置同步参数化?

转载 作者:行者123 更新时间:2023-12-04 16:44:51 25 4
gpt4 key购买 nike

我有两个灯具 AB与相同params参数传递给 pytest.fixture() .此外,B需要 A作为论据:

import pytest

@pytest.fixture(params=[1, 2])
def A(request):
if request.param == 1:
# do stuff to get matrix_1
return matrix_1
if request.param == 2:
# do stuff to get matrix_2
return matrix_2

@pytest.fixture(params=[1, 2])
def B(request, A):
if request.param == 1:
# do stuff with A to get matrix_3
return matrix_3
if request.param == 2:
# do stuff with A to get matrix_4
return matrix_4

我还有一个函数test_method ,需要固定装置Bmy_class (返回 MyClass() 实例的 fixture )作为参数并测试 my_class 的方法.该方法需要 B作为论据。我认为这些信息不一定对问题很重要,它只是为了上下文:

from my_module import MyClass

@pytest.fixture
def my_class():
return MyClass()

def test_method(my_class, B):
# do stuff to get the expected value
actual = my_class.method(B)
assert actual == expected

问题是整个构造只有在 A 时才有意义和 B在每个时间点都有相同的参数,即 A不能有 request.param = 1 , 当 Brequest.param = 2 .这些变量不打算在程序中以其他方式使用,如果被测试的代码被破坏。

有没有办法在灯具之间共享或同步参数化?或者以某种方式重新设计代码,这样就不是问题了?谢谢!

最佳答案

在 OP 发表评论后更新:

在您的代码中,您创建了四个测试而不是两个,其中两个相同。您可以使用仅提供参数而不参数化派生灯具的基本灯具:

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

@pytest.fixture
def A(Base):
if Base == 1:
return value_1
if Base == 2:
return value_2


@pytest.fixture
def B(Base):
if Base == 1:
return value_3
if Base == 2:
return value_4

关于python - 如何跨 pytest 装置同步参数化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63295077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com