Как я могу использовать приборы в вспомогательных функциях? - PullRequest
0 голосов
/ 19 июня 2019

Я задавал тот же вопрос в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...