3

I asked the same question in GitHub.

I learned about pytest-helpers-namespace from s0undt3ch in his very helpful answer. However I found a usecase I cant seem to find an obvious workaround. Here is the paste of my original question on GitHub.


How can I use the fixtures already declared in my conftest within my helper functions? I am have a large, memory heavy configuration object (for simplicity, a dictionary) in all test, but I dont want to tear it down and rebuild this object, thus scoped as session and reused. Often times, I want to grab values from the configuration object within my test.

I know reusing fixtures within fixtures, you have to pass a reference

# 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

Is it because pytest collects similar decorators, and analyzes them together? I would like someone's input into this. Thanks!

Here is a few files I created to demonstrate what I was looking for, and what the error I am seeing.

# 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
Ken
  • 641
  • 3
  • 11
  • 25

0 Answers0