Pytest屈服夹具用法

时间:2017-12-06 10:07:34

标签: pytest yield contextmanager fixture

我有一个用例,在一个"上下文管理器中,我可以在测试中多次使用fixture。办法。请参阅下面的示例代码:

在conftest.py中

class SomeYield(object):
    def __enter__(self):
        log.info("SomeYield.__enter__")

    def __exit__(self, exc_type, exc_val, exc_tb):
        log.info("SomeYield.__exit__")


def generate_name():
    name = "{current_time}-{uuid}".format(
        current_time=datetime.now().strftime("%Y-%m-%d-%H-%M-%S"),
        uuid=str(uuid.uuid4())[:4]
    )
    return name


@pytest.yield_fixture
def some_yield():
    name = generate_name()
    log.info("Start: {}".format(name))
    yield SomeYield()
    log.info("End: {}".format(name))

在test_some_yield.py

def test_some_yield(some_yield):
    with some_yield:
        pass

    with some_yield:
        pass

控制台输出:

INFO:conftest:Start: 2017-12-06-01-50-32-5213
INFO:conftest:SomeYield.__enter__
INFO:conftest:SomeYield.__exit__
INFO:conftest:SomeYield.__enter__
INFO:conftest:SomeYield.__exit__
INFO:conftest:End: 2017-12-06-01-50-32-5213

问题:

  1. 如果我在SomeYield中有一些设置代码。输入并清理代码 SomeYield。退出,这是使用fixture进行的正确方法 我的测试中有多个电话?
  2. 为什么我没有看到三次出现 输入退出?这是预期的吗?

0 个答案:

没有答案