Я задавал тот же вопрос в GitHub .
Я узнал о пространстве имен pytest-helpers-name от s0undt3ch в его очень полезном ответе. Однако я нашел вариант использования, который, похоже, не нашел очевидного обходного пути. Вот вставка моего оригинального вопроса на GitHub.
Как я могу использовать приборы, уже объявленные в моем контесте, в своих вспомогательных функциях?
У меня большой объект конфигурации с большим объемом памяти (для простоты, словарь) во всех тестах, но я не хочу разбирать его и перестраивать этот объект, таким образом, он определен как сеанс и используется повторно. Часто я хочу получить значения из объекта конфигурации в моем тесте.
Я знаю, что можно повторно использовать приборы внутри приборов, вы должны передать ссылку
# fixtures
@pytest.fixture(scope="session")
def return_dictionary():
return {
"test_key": "test_value"
}
@pytest.fixture(scope="session")
def add_random(return_dictionary):
_temp = return_dictionary
_temp["test_key_random"] = "test_random_value"
return _temp
Это потому, что pytest собирает похожие декораторы и анализирует их вместе? Я хотел бы чей-то вклад в это. Спасибо!
Вот несколько файлов, которые я создал, чтобы продемонстрировать, что я искал, и какую ошибку я вижу.
# conftest.py
import pytest
from pprint import pprint
pytest_plugins = ["helpers_namespace"]
# fixtures
@pytest.fixture(scope="session")
def return_dictionary():
return {
"test_key": "test_value"
}
# helpers
@pytest.helpers.register
def super_print(_dict):
pprint(_dict)
@pytest.helpers.register
def super_print_always(key, _dict=return_dictionary):
pprint(_dict[key])
# test_check.py
import pytest
def test_option_1(return_dictionary):
print(return_dictionary)
def test_option_2(return_dictionary):
return_dictionary["test_key_2"] = "test_value_2"
pytest.helpers.super_print(return_dictionary)
def test_option_3():
pytest.helpers.super_print_always('test_key')
key = 'test_key', _dict = <function return_dictionary at 0x039B6C48>
@pytest.helpers.register
def super_print_always(key, _dict=return_dictionary):
> pprint(_dict[key])
E TypeError: 'function' object is not subscriptable
conftest.py:30: TypeError