首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pytest fixtures作用域

Pytest fixtures作用域
EN

Stack Overflow用户
提问于 2019-02-14 01:56:28
回答 1查看 696关注 0票数 1

对于这个问题,很抱歉。这可能是重复的,但在谷歌上找不到足够的相关信息。我知道fixture有4个作用域(函数、模块、类、会话)。我只想知道这些作用域是否只有在我使用autouse true时才有效。对于autouse=False,我可以在测试函数中使用任何作用域的任何fixture吗

就像我有一个conftest.py文件,它的fixture为

代码语言:javascript
复制
@pytest.fixture(scope="module")
def test_fixture():
    DO something
    print "Module level fixture am called"

test.py文件包含以下数据

代码语言:javascript
复制
class ABC:
    def test(test_fixture):
        print "Doing something"
    def test_2(test_fixture):
        print "Executing second test"

现在,如果我将fixture的scope更改为session,它仍然会运行并产生相同的结果。

这是否意味着作用域仅在autouse=True

EN

回答 1

Stack Overflow用户

发布于 2019-02-14 17:59:40

首先,我需要将您的类重命名为TestABC,这样pytest就可以找到它。

其次,我将假设您使用的是Python 2,但请记住,pytest 5.0将不再支持它。

我认为这是您的主要问题:因为您使用一个类对测试进行分组,所以方法的第一个参数始终是实例本身(也称为self),即使您给它另一个名称也是如此。

这就是为什么pytest没有真正检测到你想要通过fixture,而且它从来没有做到这一点。

所以试着这样做:

代码语言:javascript
复制
class TestABC:

    def test(self, test_fixture):
        print "Doing something"

    def test_2(self, test_fixture):
        print "Executing second test"

还要注意,您不需要使用类来对测试进行分组,您可以使用常规函数。所以移除这个类也可以解决你的问题:

代码语言:javascript
复制
def test(test_fixture):
    print "Doing something"


def test_2(test_fixture):
    print "Executing second test"

此外,在您的示例中,modulesession将产生类似的效果,因为您只有一个模块(至少在您的示例中是这样)。

但是您可以很容易地与默认作用域进行比较:如果您完全删除了作用域参数,则在每次需要它的测试之前都会调用一次fixture。

代码语言:javascript
复制
@pytest.fixture
def test_fixture():
    # DO something
    print "Default test level fixture"

使用module将为整个模块调用它一次。session会为所有模块调用它一次。

回答你最初的问题:不,作用域在autouse=False时也适用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54676565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档