Python - 如何访问夹具属性
我想访问一个在测试夹具(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在你需要为多个测试案例准备一些更复杂的数据时非常有用,比如你需要一组对象,这些对象会被多个测试引用。