У меня следующая структура модулей:
.
├── conftest.py
└── test
├── test_one.py
└── test_two.py
Мой conftest.py содержит единственное приспособление:
import pytest
@pytest.fixture(scope='session')
def sophisticated_fixture():
print('\nFixture init')
yield 42
print('\nFixture kill')
Мои test_{one,two}.py
тесты выглядят так:
from conftest import sophisticated_fixture
def test_a(sophisticated_fixture):
assert sophisticated_fixture == 42
def test_b(sophisticated_fixture):
assert sophisticated_fixture == 42
Я ожидал, что запуск pytest -s
в каталоге верхнего уровня приведет к запуску всех тестов с использованием одного и того же приспособления, поскольку я определил его как уровень сеанса. Однако бывает так:
============================= test session starts ==============================
platform linux -- Python 3.6.6, pytest-4.0.2, py-1.7.0, pluggy-0.8.0
rootdir: /home/tomasz/example, inifile:
collected 4 items
test/test_one.py
Fixture init
..
test/test_two.py
Fixture init
..
Fixture kill
Fixture kill
=========================== 4 passed in 0.01 seconds ===========================
Очевидно, что функция фиксации вызывается дважды для каждого тестового модуля, и фиксация завершается в самом конце тестового прогона.
Как я могу сделать свой прибор глобальным на время всего сеанса тестирования?