[英]Parameterize fixture factory in Pytest
我有一个假名工厂夹具:
@pytest.fixture
def dummy_name():
def func(name="Dummy Name"):
yield name
num = 2
while True:
yield f"{name}_{num}"
num += 1
return func
我有一个利用这个的夹具:
@pytest.fixture
def dummy_document_file_name(dummy_name, extension):
if extension:
return dummy_name(name="test_file" + f".{extension}")
return dummy_name(name="test_file.dummy_extension")
但是extension
应该不是另一个夹具,而是该夹具用户提供的参数。
所以我想实现这一点:
dummy_file = next(dummy_document_file_name(extension="txt")) # test_file.txt
dummy_file2 = next(dummy_document_file_name(extension="txt")) # test_file2.txt
自然它会寻找另一个夹具:
@pytest.fixture
def dummy_document_file_name(dummy_name, extension):
E fixture 'extension' not found
> available fixtures: ...
有没有办法注入非夹具参数?
您可以使用fixture 装饰器中的params 设置默认值, request
获取传递给fixture 的参数,并使用pytest.mark.parameterize
装饰器设置测试级别的参数。 在pytest.mark.parameterize
中,您必须定义要参数化的夹具的名称,将参数作为可迭代对象传递,最重要的是,将间接标志设置为 True。 在代码中,这看起来像
@pytest.fixture(params=[None])
def dummy_document_file_name(dummy_name, request):
if extension := request.param:
return dummy_name(name="test_file" + f".{extension}")
return dummy_name(name="test_file.dummy_extension")
@pytest.mark.parametrize('dummy_document_file_name', ("csv","pdf",None), indirect=True)
def test_this(dummy_document_file_name):
print(dummy_document_file_name)
assert True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.