Pytest:使用参数创建增量夹具值
Pytest: create incremental fixture value with argument
好的,我有这个夹具:
@pytest.fixture
def dummy_name():
def func(name="Dummy Name"):
num = 2
while True:
yield name
if num > 2:
tags = name.rsplit("_", 1)
name = f"{tags[0]}_{num}"
else:
name += f"_{num}"
num += 1
return func
@pytest.fixture
def dummy_admin_name(dummy_name):
return dummy_name(name="Dummy Admin")
我可以这样使用它:
def some_function(dummy_admin_name):
print(next(dummy_admin_name))
print(next(dummy_admin_name))
print(next(dummy_admin_name))
哪个returns:
Dummy Admin
Dummy Admin_2
Dummy Admin_3
但问题是我必须始终为不同的字符串创建辅助夹具,因为调用基础 dummy_name
夹具不起作用:
def some_function(dummy_name):
print(next(dummy_name(name="Dummy Admin")))
print(next(dummy_name(name="Dummy Admin")))
print(next(dummy_name(name="Dummy Admin")))
哪个returns:
Dummy Admin
Dummy Admin
Dummy Admin
很明显,因为每次添加参数三次都会重置 name
值。
如何在没有新设备的情况下使该输入在未来的调用中保持不变?
如您所写,您不能多次调用夹具,因为它会重新创建
每次的功能。但是,您可以在使用之前创建可调用对象:
def test_something(dummy_name):
dummy_admin = dummy_name(name="Dummy Admin")
print(next(dummy_admin))
print(next(dummy_admin))
print(next(dummy_admin))
dummy_user = dummy_name(name="Dummy User")
print(next(dummy_user))
print(next(dummy_user))
打印:
Dummy Admin
Dummy Admin_2
Dummy Admin_3
Dummy User
Dummy User_2
好的,我有这个夹具:
@pytest.fixture
def dummy_name():
def func(name="Dummy Name"):
num = 2
while True:
yield name
if num > 2:
tags = name.rsplit("_", 1)
name = f"{tags[0]}_{num}"
else:
name += f"_{num}"
num += 1
return func
@pytest.fixture
def dummy_admin_name(dummy_name):
return dummy_name(name="Dummy Admin")
我可以这样使用它:
def some_function(dummy_admin_name):
print(next(dummy_admin_name))
print(next(dummy_admin_name))
print(next(dummy_admin_name))
哪个returns:
Dummy Admin
Dummy Admin_2
Dummy Admin_3
但问题是我必须始终为不同的字符串创建辅助夹具,因为调用基础 dummy_name
夹具不起作用:
def some_function(dummy_name):
print(next(dummy_name(name="Dummy Admin")))
print(next(dummy_name(name="Dummy Admin")))
print(next(dummy_name(name="Dummy Admin")))
哪个returns:
Dummy Admin
Dummy Admin
Dummy Admin
很明显,因为每次添加参数三次都会重置 name
值。
如何在没有新设备的情况下使该输入在未来的调用中保持不变?
如您所写,您不能多次调用夹具,因为它会重新创建 每次的功能。但是,您可以在使用之前创建可调用对象:
def test_something(dummy_name):
dummy_admin = dummy_name(name="Dummy Admin")
print(next(dummy_admin))
print(next(dummy_admin))
print(next(dummy_admin))
dummy_user = dummy_name(name="Dummy User")
print(next(dummy_user))
print(next(dummy_user))
打印:
Dummy Admin
Dummy Admin_2
Dummy Admin_3
Dummy User
Dummy User_2