Вернуть переменную из контеста в тестовый класс

У меня есть следующие сценарии:

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

Извините за столько ссылок на документы, но я думаю, что у них есть хорошие примеры. Надеюсь, что все проясняется.

Другие вопросы по тегам