Мои тестовые файлы pytest распределены по нескольким пакетам, и они имеют некоторые общие свойства.Тем не менее, я обнаружил, что мой автоматически используемый прибор в области сеанса запускается несколько раз.
Вот базовая структура моего проекта:
.
├── 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
file:
==> ./__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:
➜ 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 ========================
Насколько я понимаю, для сессионных приспособлений они будут запускаться только один раз за время жизни pytest
команда.Но здесь setting up
и tearing down
печатаются дважды, и они чередуются.
Есть ли способ выполнить прибор только один раз?Я хочу, чтобы setting up
печатался только один раз в начале и tearing down
в самом конце для всего сеанса тестирования.
PS Я знаю, что параметризованное устройство сеанса будет выполняться несколько раз.Но я не думаю, что мой прибор параметризован.