@contextlib.contextmanager
def connect(port):
print("yield 之前")
yield Foo(1,2)
... # close connection
print("yield 之后")
@pytest.fixture
def equipments(request):
r = []
for port in ("C1", "C3", "C28"):
cm = connect(port)
equip = cm.__enter__()
request.addfinalizer(functools.partial(cm.__exit__, None,None, None))#测试方法运行完成后执行此方法类似于teardown
r.append(equip)
print("equipmentsasdfadsfds")
return r
def test_compare(equipments):
equipments[0]
# 先执行 connent 遇到yield 返回 执行equipments 返回到test_compare 执行test_compare后因为加入了request.addfinalizer() 然后会去执行cm.__exit_ 最后执行了yield后的数据 最后结束
if __name__ == '__main__':
pytest.main(["-s","test_login.py"])