很抱歉这个问题。它可能具有重复性,但在Google上找不到与此相关的足够内容。我知道灯具有4个作用域(功能,模块,类,会话)。只想知道这些作用域是否仅在使用autouse true
时有效?对于autouse=False
,我可以在测试功能中使用具有任何作用域的任何夹具
就像我有一个conftest.py
文件一样,其夹具为
@pytest.fixture(scope="module")
def test_fixture():
DO something
print "Module level fixture am called"
test.py
文件包含以下数据
class ABC:
def test(test_fixture):
print "Doing something"
def test_2(test_fixture):
print "Executing second test"
现在,如果我将灯具的scope
更改为session
,它将仍然运行并产生相同的结果。
这意味着作用域仅在autouse=True
时有效吗?
答案 0 :(得分:0)
首先,我需要将您的类重命名为TestABC
,以便pytest可以找到它。
第二,我假设您使用的是Python 2,但请记住,pytest 5.0将不再支持它。
我认为这是您的主要问题:由于您使用的是一个类来对测试进行分组,因此,方法的第一个参数始终是实例本身(即self
),即使您给它起了另一个名字。
这就是为什么pytest并没有真正检测到您想要通过固定装置,并且永远不会通过。
所以尝试这样的事情:
class TestABC:
def test(self, test_fixture):
print "Doing something"
def test_2(self, test_fixture):
print "Executing second test"
还请注意,您不需要使用类来对测试进行分组,可以使用常规函数。因此,删除该类也应该可以解决您的问题:
def test(test_fixture):
print "Doing something"
def test_2(test_fixture):
print "Executing second test"
另外,在您的情况下,module
和session
也会产生类似的效果,因为您只有一个模块(至少在示例中如此)。
但是您可以轻松地将其与默认范围进行比较:如果完全删除范围参数,则在每次需要它的测试之前都会调用一次夹具。
@pytest.fixture
def test_fixture():
# DO something
print "Default test level fixture"
使用module
将为整个模块调用一次。 session
将为所有模块调用一次。
要回答您的原始问题:不,在autouse=False
时,范围也适用。