测试人社区

fixture的工厂模式,在工作中的应用场景是怎么样的?

疑惑点:

  • Factories as fixtures 的应用场景是怎么样的?
  • 为什么make_customer_record(“Lisa”) ,接收Lisa字符串不是make_customer_record而是_make_customer_record?可以直接跳过第一个函数吗?
  • 返回给test_customer_records的是一个函数,那make_customer_record(“Lisa”)是直接调用返回的 _make_customer_record函数吗?为什么不是再从make_customer_record进一次,这个逻辑不太懂
  • 以下两种方式有什么不同?
@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")
    customer_2 = make_customer_record("Mike")
    customer_3 = make_customer_record("Meredith")
def make_customer_record(name):
    def _make_customer_record(name):
        return {"name": name, "orders": []}

    return _make_customer_record(name)


def test_customer_records():
    customer_1 = make_customer_record("Lisa")
    print(customer_1)
    customer_2 = make_customer_record("Mike")
    print(customer_2)
    customer_3 = make_customer_record("Meredith")
    print(customer_3)

fixture返回的_make_customer_record由customer_1 = make_customer_record接收,同时赋值"Lisa"进入_make_customer_record方法吗?

  1. 比如我们想要传入一些配置,测试环境需要一些配置数据,开发环境需要另一些配置数据 ,各个环境的测试数据非常复杂,就可以使用这种方式 。工厂模式可以对你传入的数据进行加工,返回回给你一些你需要的更复杂的数据。

  2. fixture返回的是个方法, 正常是个参数,你直接调make_customer_record 代表调用返回的参数,现在返回的是个方法, 可以使用make_customer_record()来调用,那这个方法里面需要传递 的参数就是你要传入的参数了。