目录
1.yield方式完成清理(推荐)
1.1介绍
使用yield的fixture和普通的fixture基本差不多,但还是有以下两点:
- return改换成yield。
- 需要做清理的代码写在yield的下面。
使用yield后,fixture的执行顺序是这样的,如有两个fixture函数,fixture1和fixture2,先由pytest计算出fixture的线性顺序,它将运行每个fxiture直到它返回,然后移动到列表中的下一个夹具做同样的事情。等待测试完成后,pytest将返回到fxiture列表,但顺序相反,如果开始先执行了fixture1再执行了fixture2,那么后面就是先执行fixture2在执行fixture1.
1.2代码示例
文件名:test_demo.py
import pytest
@pytest.fixture
def get_token():
print("请求获取token")
yield
# 这里写你的清理代码
print("注销token")
def test_demo():
print("测试用例")
1.3运行结果
1.4结果分析
1.5举例说明多个yield的fixture执行顺序
- 示例代码
文件名: test_demo.py
import pytest
@pytest.fixture
def fn1():
print("我是fn1,我在yield前面")
yield 1
print("我是fn1,我在yield后面")
@pytest.fixture
def fn2(fn1):
print("我是fn2,我在yield前面")
yield 2
print("我是fn2,我在yield后面")
def test_demo(fn2):
print("我是测试用例")
- 运行结果
- 结果分析
1.6对于yield出错后的执行方式说明
还是通过代码和运行的方式进行说明
- 实例代码
文件名: test_demo.py
import pytest
@pytest.fixture
def fn1():
print("我是fn1,我在yield前面")
yield 1
print("我是fn1,我在yield后面")
@pytest.fixture
def fn2(fn1):
print("我是fn2,我在yield前面")
1/0
yield 2
print("我是fn2,我在yield后面")
def test_demo(fn2):
print("我是测试用例")
- 运行结果
- 结果分析
2.使用addfinalizer方法完成清理
2.1介绍
2.2实例代码
文件名: test_demo.py
import pytest
@pytest.fixture
def login(request):
print("登陆前置")
def clear():
print("登陆后置,清理代码")
request.addfinalizer(clear)
yield
print("我是login yield的代码")
@pytest.fixture
def setup(login, request):
print("前置代码")
def clear():
print("setup后置代码")
request.addfinalizer(clear)
yield
print("后置代码")
def test_demo(setup):
print("测试用例")
2.3运行结果
2.4结果分析
3.两种方式适用的场景
- 代码示例
文件名: test_demo.py
import pytest
@pytest.fixture
def login(request):
print("登陆前置")
def clear():
print("登陆后置,清理代码")
request.addfinalizer(clear)
1/0
yield
print("我是login yield的代码")
def test_demo(login):
print("测试用例")
- 运行结果
- 结果分析