I asked the same question in GitHub。
我在他非常有用的答案中了解了pytest-helpers-namespace from 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