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