pytest系列——fixture之yield关键字实现teardown用例后置操作

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"])

运行结果:

pytest系列——fixture之yield关键字实现teardown用例后置操作_第1张图片

【注意】: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:搜索pyt

你可能感兴趣的:(pytest框架,pytest,python,开发语言)