Python - 如何访问夹具属性

0 投票
2 回答
40 浏览
提问于 2025-04-14 18:21

我想访问一个在测试夹具(fixture)里的属性,我该怎么做呢?

这是一个名为 contest.py 的文件

@pytest.fixture(scope="session")
def numbers():
    one = 1
    two = 2
    total = one+two
    return numbers
    

还有一个名为 num.py 的文件

def test(numbers):
    print("total = ",numbers.total)

我在上面的代码中遇到了以下错误: AttributeError: 'function' object has no attribute 'total'

2 个回答

-1
def test(numbers):
print(numbers())

在一个函数里面声明的变量,外面是无法访问的。

1

我觉得你可能对如何使用“fixture”(测试夹具)有些误解。不过根据你的例子,看来你想要一个fixture返回一个带有一些数据的对象,这样你就可以通过点号(.)来访问这些数据。为了实现这个,你可以创建一个空的类,然后让fixture返回这个类的一个实例,像这样:

import pytest

class TestData():
    pass

@pytest.fixture(scope="session")
def numbers():
    data = TestData()
    data.one = 1
    data.two = 2
    data.total = data.one + data.two
    return data

def test_nums(numbers):
    assert numbers.one == 1
    assert numbers.two == 2
    assert numbers.total == 3

不过,这可能是一个XY问题,因为你并没有真正解释你想做什么和为什么要这样做。

如果你只是想在测试中使用基本的整数,比如1和2,那就直接用这些数字就行了。如果你想把不同的整数集合传给相同的测试,可以考虑使用@pytest.mark.parameterize

fixture在你需要为多个测试案例准备一些更复杂的数据时非常有用,比如你需要一组对象,这些对象会被多个测试引用。

撰写回答