2.pytest前后置(固件、夹具)处理
阅读原文时间:2023年07月09日阅读:2

一、setup/teardown/setup_calss/teardown_class

  为什么需要这些功能?

  比如:我们执行用例之前,需要做的哪些操作,我们用例执行之后,需要做哪些操作

# 在所有用例之前,只执行一次
def setup_class(self):
print('在每个类执行前的初始化的工作,比如:创建日志对象,连接数据库等')

在所有用例之后,只执行一次

def teardown_class(self):
print('在每个类执行完成之后的扫尾动物,比如:销毁日志对象,断开数据库等')

在每个用例之前,都执行一次

def setup(self):
print('在每个测试用例执行之前执行的代码')

在每个用例之后,都执行一次

def teardown(self):
print('在每个测试用例执行完成之后执行的代码')
"""
执行顺序与上下顺序无关
"""

二、@pytest.fixture()装饰器实现部分用例前后置介绍

格式
@pytest.fixture(scope='',params='',autouse='',ids='',name='')
def my_fixture():#自定义的前、后置方法,使用装饰器声明
print('这是前置方法')
yield '返回值,可有可无' # yield分隔,上面的代码是执行用例前执行,下面的代码用例执行完执行
# return 在返回结果后结束函数的运行,而yield 则是让函数变成一个生成器,生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值
print('这是后置方法')
#参数
scope:表示被pytest.fixture标记的方法的作用域
function:函数,默认的
class:类作用域
module:模块 整个py文件
package/session:包作用域、会话作用域
params:参数化,有多少个值,就会执行多少次用例
autouse:True:自动执行,默认是FALSE
ids:当使用params参数化时,给每一个值设置一个变量名
name:表示是被@pytest.fixture标记的方法取一个别名

三、@pytest.fixture()装饰器使用示例

部分实现

@pytest.fixture(scope='function')
def my_fixture():
    print('这是前置方法')
    yield
    print('这是后置方法')

class TestRegister:
    #在用例函数传参里面传入对应的方法,传入该方法的用例会有前后置操作
    def test_register(self,my_fixture):
        print('测试注册')

    def test_login(self):
        print('测试登录')

全部自动执行

 #autouse默认是False,我们给指定场景传入,如果是True,不需要传入全部会调用,相当于setup、teardown效果
@pytest.fixture(autouse=True)
def my_fixture():
    print('这是前置方法')
    yield 'sussic'
    print('这是后置方法')

params参数化

params支持列表、元组、字典列表(列表套字典)、字典元组(元组套字典)四种格式
@pytest.fixture(params=['test1','test2'])
def my_fixture(request): # 传入request
    #可以使用request.param获取到params里面的参数 ,固定写法,不带s
#params里面有多少个值,用例就会执行多少次

ids

@pytest.fixture(params=['test1','test2'],ids=[a,b])

name

@pytest.fixture(name='new_name') #指定一个别名,使用该别命调用,原来的my_fixture不可再用

三、通过conftest.py和@pytest.fixture()结合实现全局的前后置应用

  • conftest.py文件是单独存放的一个夹具配置文件,名称不能更改
  • 可以在不同的py文件中使用同一个fixture函数
  • 在conftest.py里面编写好前后置方法,然后在其他文件的方法直接传入夹具方法名就可以,可以跨文件使用,不需要导入文件
  • 原则上conftest.py文件和用例文件同级,可以有多个conftest文件,也可以在项目根目录下,都可以实现全局调用

四、各自写法优先级按上到下

  • fixtrue 的session
  • fixture的class
  • setup_class
  • fixture的function
  • setup

五、pytest执行过程

  • 查询当前目录下的conftest.py文件
  • 查询当前目录下的pytest.ini文件
  • 查询用例目录下的conftest.py文件
  • 查询py文件中是否有setup/teardown/setup_calss/teardown_class
  • 再根据pytest.ini文件规则去查找执行l

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器