首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pytest:防止导入的自动使用的会话fixture多次执行

pytest:防止导入的自动使用的会话fixture多次执行
EN

Stack Overflow用户
提问于 2018-11-21 23:45:18
回答 1查看 656关注 0票数 2

我的pytest测试文件分布在多个包中,它们共享一些公共的fixture。但是,我发现我的自动使用的会话作用域fixture被多次运行。

以下是我的项目的基本结构:

代码语言:javascript
复制
.
├── Pipfile
├── Pipfile.lock
├── __init__.py
├── common
│   ├── __init__.py
│   └── conftest.py
├── pkg_a
│   ├── __init__.py
│   ├── conftest.py
│   └── test_a.py
└── pkg_b
    ├── __init__.py
    ├── conftest.py
    └── test_b.py

下面是每个.py文件的内容:

代码语言:javascript
复制
==> ./__init__.py <==

==> ./common/__init__.py <==

==> ./common/conftest.py <==
import pytest


@pytest.fixture(scope='session', autouse=True)
def setup():
    print 'setting up'
    yield
    print 'tearing down'


==> ./pkg_a/__init__.py <==

==> ./pkg_a/conftest.py <==
from common.conftest import *

==> ./pkg_a/test_a.py <==
def test():
    assert True

==> ./pkg_b/__init__.py <==

==> ./pkg_b/conftest.py <==
from common.conftest import *

==> ./pkg_b/test_b.py <==
def test_b():
    assert True

下面是pytest的输出:

代码语言:javascript
复制
➜ pytest -s pkg_a pkg_b
========================== test session starts ==========================
platform darwin -- Python 2.7.15, pytest-3.10.0, py-1.7.0, pluggy-0.8.0
rootdir: /path/to/the/project, inifile:
collected 2 items

pkg_a/test_a.py setting up
.
pkg_b/test_b.py setting up
.tearing down
tearing down


======================= 2 passed in 0.02 seconds ========================

我对会话fixture的理解是,在pytest命令的生命周期内,它们只会运行一次。但是在这里,setting uptearing down被打印了两次,并且它们是交错的。

有没有办法只执行一次fixture?我希望在整个测试会话开始时只打印一次setting up,在最后打印一次tearing down

附注:我知道参数化的会话fixture将被多次执行。但我不认为我的fixture是参数化的。

EN

回答 1

Stack Overflow用户

发布于 2018-11-22 02:00:42

你是正确的。会话作用域的fixture应该只运行一次。但是如果仔细观察,就会发现test_a有两个安装fixture,一个来自common/conftest.py,另一个来自pkg_a/conftest.py。您不需要在pkg_a/conftest.py中导入common.conftest.py。pytest从项目根目录开始收集conftest文件。您可以使用--setup-show开关pytest test_a.py --setup-show查看灯具设置过程。

要解决您的问题,可以从test_a(b)/conftest.py文件中删除from common.conftest import *

更多关于pytest的conftest集合的信息,请访问:https://docs.pytest.org/en/2.7.3/plugins.html

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

https://stackoverflow.com/questions/53415697

复制
相关文章

相似问题

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