【问题标题】:Pytest: create incremental fixture value with argumentPytest:使用参数创建增量夹具值
【发布时间】:2021-08-04 15:06:09
【问题描述】:

好的,我有这个夹具:

@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))

返回:

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")))

返回:

Dummy Admin
Dummy Admin
Dummy Admin

很明显,因为添加参数 3 次,每次都会重置 name 值。

如果没有新的固定装置,我怎样才能使该输入在未来的调用中保持不变?

【问题讨论】:

    标签: python pytest fixtures


    【解决方案1】:

    正如您所写,您不能多次调用夹具,因为它会重新创建 每次的功能。但是,您可以在使用它之前创建可调用对象:

    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
    

    【讨论】:

      猜你喜欢
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      相关资源
      最近更新 更多