繁体   English   中英

来自函数作用域夹具的 pytest 访问参数

[英]pytest access parameters from function scope fixture

假设我有以下代码:

@pytest.mark.parametrize("argument", [1])
def test_func(self, function_context, argument)

我有以下功能范围夹具:

@pytest.fixture(scope='function')
def function_context(session_context):
    # .... do something ....

是否可以从function_context夹具中访问当前函数参数?

就我而言 - 我想从function_context获取在parametrize中传递的值1

pytest中的夹具在实际测试运行之前被实例化,因此在夹具定义阶段应该不可能访问测试函数参数。 但是,我可以想到两种方法来绕过这个:

1. 猴子补丁

您可以根据使用此设备的函数的参数对设备进行猴子修补,即临时更改其某些属性。 例如:

@pytest.fixture(scope='function')
def function_context(session_context):
    # .... do something ....

@pytest.mark.parametrize("argument", [1])
def test_func(self, function_context, argument, monkeypatch):
    monkeypatch.setattr(function_context, "number", argument) # assuming you want to change the attribute "number" of the function context
    # .... do something ....

尽管您的装置无论如何仅对函数的范围有效,但monkeypatching 也仅对测试的单次运行有效。

2. 参数化夹具而不是测试函数

或者,您也可以选择参数化夹具本身而不是test_func 例如:

@pytest.fixture(scope='function', params=[0, 1])
def function_context(session_context, request):
    param = requests.param # now you can use param in the fixture
    # .... do something ...

def test_func(self, function_context):
    # .... do something ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM