对于这个问题,很抱歉。这可能是重复的,但在谷歌上找不到足够的相关信息。我知道fixture有4个作用域(函数、模块、类、会话)。我只想知道这些作用域是否只有在我使用autouse true时才有效。对于autouse=False,我可以在测试函数中使用任何作用域的任何fixture吗
就像我有一个conftest.py文件,它的fixture为
@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"现在,如果我将fixture的scope更改为session,它仍然会运行并产生相同的结果。
这是否意味着作用域仅在autouse=True
发布于 2019-02-14 17:59:40
首先,我需要将您的类重命名为TestABC,这样pytest就可以找到它。
其次,我将假设您使用的是Python 2,但请记住,pytest 5.0将不再支持它。
我认为这是您的主要问题:因为您使用一个类对测试进行分组,所以方法的第一个参数始终是实例本身(也称为self),即使您给它另一个名称也是如此。
这就是为什么pytest没有真正检测到你想要通过fixture,而且它从来没有做到这一点。
所以试着这样做:
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将产生类似的效果,因为您只有一个模块(至少在您的示例中是这样)。
但是您可以很容易地与默认作用域进行比较:如果您完全删除了作用域参数,则在每次需要它的测试之前都会调用一次fixture。
@pytest.fixture
def test_fixture():
# DO something
print "Default test level fixture"使用module将为整个模块调用它一次。session会为所有模块调用它一次。
回答你最初的问题:不,作用域在autouse=False时也适用。
https://stackoverflow.com/questions/54676565
复制相似问题