如何在 Pytest 参数化功能中调用对象的属性



我有一些固定装置,它们只返回类的对象。这些对象包含我试图在pytest中验证的那个类的属性,所以代码看起来像这样:

from main import My_class
import pytest
@pytest.fixture()
def fixt1():
object1 = My_class("atr1", "atr2")
return object1
@pytest.fixture()
def fixt2():
object2 = My_class("atr3", "atr4")
return object2
@pytest.mark.parametrize('inputs, results',
[
(fixt1, 10.0),
(fixt2, 22.5)
]
)
def test_fixts(inputs, results):
assert inputs.price == results

此代码将始终返回属性错误:

AttributeError: 'function' object has no attribute 'price'

然而,尝试用这样的简单测试来测试这些属性是可行的:

def test_simple(fixt1):
assert fixt1.price == 10.0

我能得到一些关于这个问题的建议吗?因为我在任何地方都找不到关于如何正确调用参数化中的对象属性的说明?

非常感谢!

固定装置不能像函数一样使用——它们必须在测试函数或其他固定装置中用作参数。在mark.parametrize的参数中,您可以使用正常功能:

def param1():
return My_class("atr1", "atr2")
def param2():
return My_class("atr3", "atr4")
@pytest.mark.parametrize('inputs, results',
[
(param1(), 10.0),
(param2(), 22.5)
]
)
def test_fixts(inputs, results):
assert inputs.price == results

请注意,您只能使用可以在加载时执行的函数,因为mark.parametrize装饰器是在加载时评估的,因此它不能依赖于任何运行时更改。

最新更新