Вернуть переменную из контеста в тестовый класс
У меня есть следующие сценарии:
conftest.py:
import pytest
@pytest.fixture(scope="session")
def setup_env(request):
# run some setup
return("result")
test.py:
import pytest
@pytest.mark.usefixtures("setup_env")
class TestDirectoryInit(object):
def setup(cls):
print("this is setup")
ret=setup_env()
print(ret)
def test1():
print("test1")
def teardown(cls):
print("this teardown")
Я получаю ошибку:
def setup(cls):
print("this is setup")
> ret=setup_env()
E NameError: name 'setup_env' is not defined
В setup()
Я хочу получить возвращаемое значение "результат" из setup_env()
в conftest.py
,
Может ли какой-нибудь эксперт подсказать мне, как это сделать?
1 ответ
Я полагаю, что @pytest.mark.usefixtures
больше предназначен для изменения состояния перед выполнением каждого теста. Из документов:
"Иногда тестовые функции напрямую не нуждаются в доступе к объекту прибора".
https://docs.pytest.org/en/latest/fixture.html
Это означает, что ваш прибор работает в начале каждого теста, но ваши функции не имеют к нему доступа.
Когда вашим тестам нужен доступ к объекту, возвращенному вашим прибором, он должен быть уже заполнен по имени, когда помещен в conftest.py
и отмечен @pytest.fixture
, Все, что вам нужно сделать, - это указать имя прибора как аргумент вашей тестовой функции, например, так:
https://docs.pytest.org/en/latest/fixture.html
Если вы предпочитаете делать это на уровне класса или модуля, вы хотите изменить scope
вашей @pytest.fixture
Скажите, вот так:
https://docs.pytest.org/en/latest/fixture.html
Извините за столько ссылок на документы, но я думаю, что у них есть хорошие примеры. Надеюсь, что все проясняется.