[英]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
中的夹具在实际测试运行之前被实例化,因此在夹具定义阶段应该不可能访问测试函数参数。 但是,我可以想到两种方法来绕过这个:
您可以根据使用此设备的函数的参数对设备进行猴子修补,即临时更改其某些属性。 例如:
@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 也仅对测试的单次运行有效。
或者,您也可以选择参数化夹具本身而不是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.