python pytest之fixture

一、fixture优势:

1、 命名灵活,不局限于setup和teardown

2、 所有fixture都可写在一个conftest.py文件中,供所有测试用例使用

3、 conftest.py配置里可以实现数据共享前置,不需要import 代码自动识别

二、应用详解  fixture(scope='function',autouse=False):

1、scope作用范围如下所示(4-7):

1.1、 scop=”module” 可实现多个.py跨文件共享前置,每个.py文件调用一次

1.2、 scop=”session” 可实现多个.py跨文件使用一个session完成多个用例

1.3、 scop=”class" 每一个类调用一次,一个类中可以有多个方法

1.4、 scop="function" (默认范围) 每一个函数或方法都会调用

 

2、autouse:如果True,则为所有测试激活fixture func可以看到它。如果为False则显示需要参考来激活fixture,在所需要激的范围前加

@pytest.mark.usefixtures("fixtrue函数名") 装饰,举例如下:
conftest.py文件内容如下:

 

测试文件里用 @pytest.mark.usefixtures('case_flag')   装饰

 

二、fixture三种调用方式:

1、函数或类里面方法直接传fixture的函数名称作为参数

 

2、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

如果fixture有返回值,那么usefixture就无法获取到返回值,这是装饰器usefixture与用例直接传fixture作为参数的区别。

当fixture需要用到return出来的参数时,只能将参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以

 

3、

fixture自动使用autouse=True

当用例很多的时候,每次都传这个参数,会很麻烦。fixture里面有个参数autouse,默认是False关闭的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了

autouse设置为True,自动调用fixture功能 。举例如下:

 

conftest.py的作用范围

一个工程下可以建多个conftest.py的文件,一般在工程根目录下设置的conftest文件起到全局作用。在不同子目录下也可以放conftest.py的文件,作用范围只能在改层级以及以下目录生效。

 

 

三、实用yied在一个fixture实现setup和teardown功能,如果用例出现异常是不影响yield执行的。

 

 

四、addfinalizerp 为终结函数,跟yied一样,可以return参数,传给后面用例

 

 

五、 带返回值和参数化的fixture; 在fixture中可以使用其它的fixture

import pytest
@pytest.fixture(params=['13800000001','13300000001','13800000006'])
def phone(request):
"""获取手机号"""
return request.param
@pytest.fixture(params=['1234','3214','213'])
def login(phone,request):
return (phone,request.param)

def test_mobile(login):
print(f'手机号和密码分别是:{login}') #两个参数会组会出9个结果

 

posted @ 2022-02-16 16:40  LCX测试小姐姐  阅读(450)  评论(0编辑  收藏  举报