【求助】fixture中使用yield的时候,为什么返回generator呢?

fixture的工厂模式,返回需要的参数时,用yield为什么返回一个generator呢?

@pytest.fixture
def make_customer_record():
    def _make_customer_record(name):
        yield  {"name": name, "orders": []}

    return _make_customer_record


def test_customer_records(make_customer_record):
    customer_1 = make_customer_record("Lisa")
    print(customer_1)

以上的运行结果是这样:

<generator object make_customer_record.<locals>._make_customer_record at 0x10e78ecd0>

但是用 return 的时候:

@pytest.fixture
def make_customer_record():
    def _make_customer_record(name):
        return {"name": name, "orders": []}

    return _make_customer_record


def test_customer_records(make_customer_record):
    customer_1 = make_customer_record("Lisa")
    print(customer_1)

响应结果就是 {'name': 'Lisa', 'orders': []}

疑问:
1、请问为什么这种工厂函数的时候,yield返回的是generator呢?
2、这种情况下,想要做用例执行完后的数据清理,还有没有办法在一个fixture里面完成呢?

有没有老师指点一下呢

@seveniruby 思寒老师求助

yield代表你需要后续的处理函数,比如for in结构的处理。直接return代表了你直接返回结果不需要后续的函数配合处理。

想在测试结束后执行,需要把yield放到你的fixture里,而不是fixture内部的内嵌函数里。

明白了,谢谢老师 :rose: