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个结果