Требованием OP было то, чтобы каждая настройка и демонтаж выполнялась только один раз , а не один раз на модуль. Это может быть выполнено с помощью комбинации conftest.py файла, @pytest.fixture (scope = "session") и передачи имени устройства в каждую тестовую функцию.
Они описаны в документации по Pytest
Вот пример:
conftest.py
import pytest
@pytest.fixture(scope="session")
def my_setup(request):
print '\nDoing setup'
def fin():
print ("\nDoing teardown")
request.addfinalizer(fin)
test_something.py
def test_dummy(my_setup):
print '\ntest_dummy'
test_something2.py
def test_dummy2(my_setup):
print '\ntest_dummy2'
def test_dummy3(my_setup):
print '\ntest_dummy3'
Вывод при запуске py.test -s:
collected 3 items
test_something.py
Doing setup
test_dummy
.
test_something2.py
test_dummy2
.
test_dummy3
.
Doing teardown
Имя conftest.py имеет значение: вы не можете дать этому файлу другое имя и ожидать, что Pytest найдет его в качестве источника данных.
Установка scope = "session" важна. В противном случае настройка и демонтаж будут повторяться для каждого тестового модуля.
Если вы предпочитаете не передавать имя прибора my_setup в качестве аргумента тестовой функции, вы можете поместить тестовые функции в класс и применить к классу декоратор pytest.mark.usefixtures *. .