fixture之yield关键字实现teardown用例后置操作
前言
①pytest之fixture函数使用(pytest测试框架测试固件 文中讲到,fixture函数是通过scope参数来控制setup级别;
②既然有setup函数作为用例之前的操作,测试用例执行完成之后那肯定也有teardown操作。
③但是fixture的teardown操作并不是独立的函数,用yield关键字唤醒teardown操作。【依然存在于fixture方法中】
yield实现teardown后置操作
实例1
#使用yield关键字实现teardown_xxx的功能
import pytest
# 此时,login函数是一个测试固件,相当于实现了setup_xxx&teardown_xxx的功能。
@pytest.fixture()
def login():
############# 以下的代码相当于setup部分 ###########
print('登录系统')
token = 'a1b23c'
yield token
############# 以下的代码相当于teardown部分 ###########
print('退出登录')
# 在测试函数里, 通过形参声明要使用的测试固件
def test1(login):
# login参数的值是测试固件函数的返回值
print('执行测试 test1: ', login)
print('测试1')
def test2(login):
print('执行测试 test2: ', login)
print('测试2')
# 通过python解释器执行需要以下代码
if __name__ == '__main__':
pytest.main(["-s", "test_yieldDemo.py"])
运行结果:
【注意】:return和yield两个关键字都可以返回值;
yield关键字返回值后,后面的代码还会继续运行;【由于实例1中fixture函数login需要返回token,而且还需要继续执行teardown后置操作:所以选择yield关键字所以后面代码还会继续运行】
return关键字返回值后,后面的代码不会继续运行;
实例2
import pytest
@pytest.fixture(scope="module")
def open():
print("打开浏览器,并且打开百度首页")
yield
print("执行teardown!")
print("最后关闭浏览器")
def test_s1(open):
print("用例1:搜索python-1")
def test_s2(open):
print("用例2:搜索python-2")
def test_s3(open):
print("用例3:搜索py