Pytest的conftest的使⽤
1.当使⽤Pytest进⾏测试时, conftest.py是特殊的⽂件,⽤于管理测试⽤例中 需要通⽤数据传递

一.@pytest.fixture装饰器

1.定义简单的夹具(fixture):conftest.py
importpytest@pytest.fixturedefsetup_data():return[1,2,3,4,5]
2.在conftest.py中定义了⼀个名为setup_data的夹具3.这个夹具可以在测试用例的模块(test_001.py)中被使⽤
4.test_001.py
deftest_sum(setup_data):#这里接收的参数是ttconftest.py 中定义的函数#断言求和的值等于15assertsum(setup_data)==15deftest_traversal(setup_data):#这里接收的参数也是ttconftest.py 中定义的函数#断言i对应的数字变量存在于setup_data函数中foriinsetup_data:assertiinsetup_data
5.然后执行上面的两条测试用例(test_001.py)
5.1."pytest.fixture"是Pytest测试框架中的装饰器,⽤于定义测试⽤例中需要共 享的资源、数据或设置的函数5.2."pytest.fixture"它可以在"测试⽤例执⾏之前、之后或在每个测试⽤例之前、之后运⾏"5.2.1.并提供更⽅便的⽅式来管理测试⽤例的"前置条件和后置操作"5.3.使⽤"pytest.fixture"装饰器,可以创建⼀个被Pytest⾃动调⽤的函数5.3.1.该函数可以为测试⽤例提供所需的初始化步骤或共享的数据5.3.2.这个函数可以返回⼀个值,该值将作为参数传递给测试⽤例函数5.4.使⽤"pytest.fixture"装饰器,目的是更⽅便地管理测试⽤例的前置条件和后置操作5.4.1.实现测试数据的共享和代码的重⽤,从⽽使测试代码更加简洁、可维护和可扩展

二.pytest.fixture的参数

1."pytest.fixture"装饰器可以接受⼀些参数,⽤于"配置和定制fixture函数"的⾏为
2.常⽤的参数
2.1.scope:指定fixture的作⽤域
2.1.1.function(默认值):每个测试函数都会调⽤⼀次fixture(与setup前置一样)2.1.2.class:每个测试用例的类都会调⽤⼀次fixture2.1.3.module :每个测试模块都会调⽤⼀次fixture2.1.4.session:整个测试会话只会调⽤⼀次fixture2.1.5.yield:每个测试函数都会调⽤⼀次fixture(与tearwdon后置一样)
2.2.params:参数化fixture,可以根据不同的参数值⽣成多个独⽴的fixture实例2.2.1.可以传递⼀个可迭代对象,每个元素都会作为参数值调⽤ fixture
2.3.autouse:⾃动使⽤fixture,⽆需在测试函数中显式声明使⽤该fixture2.3.1.可以设置为TrueFalse
2.4.name:为fixture指定⼀个⾃定义名称,⽤于在测试报告和⽇志中标识fixture
2.5.其他参数:可以根据需要添加其他⾃定义参数,供fixture函数使⽤

①pytest.fixture参数为scope

1.基于类级别设置为自动调用前置、后置,设置参数为scope='class'即可
1.1.但除了声明的类,函数也同样会执行
1.2.conftest.py
importpytest@pytest.fixturedefdata():return[1,2,3,4,5,6]@pytest.fixture(autouse=True,scope='class')#设置自动调用前、后置,且级别为类defauto_print():print("这里是自动调用的前置")yieldprint("这里是自动调用的后置")

1.3.执行效果

2.基于模块级别设置为自动调用前置、后置,设置参数为scope='module'即可
2.1.conftest.py
importpytest@pytest.fixturedefdata():return[1,2,3,4,5,6]@pytest.fixture(autouse=True,scope='module')#设置自动调用、且为模块级别defauto_print():print("这里是自动调用的前置")yieldprint("这里是自动调用的后置")
2.2.执行效果: 与上面提到的模块级别的setup和teardown函数的作用是一样的(1个模块)

2.3.基于用例项目根目录下,多个模块执行的效果(两个模块,共6条用例)


3.基于文件级别设置为自动调用前置、后置,设置参数为scope='session'即可
3.1.文件级别:针对的是用例根目录下的所有用例模块
3.2.conftest.py
importpytest@pytest.fixturedefdata():return[1,2,3,4,5,6]@pytest.fixture(autouse=True,scope='session')#设置自动调用、且为文件级别defauto_print():print("这里是自动调用的前置")yieldprint("这里是自动调用的后置")
3.3.还是两个模块

3.4.执行效果

②pytest.fixture参数化params

1.在conftest文件中执行参数,传给对应模块的用例
1.1.conftest.py
importpytest@pytest.fixture(params=["a","b","c"])defparams(request):returnrequest.param
1.2.test_002.py
deftest_(params):print(params)
1.3.执行结果

1.4.也可以给参数自定义名称

③pytest.fixture参数为autouse

1.基于一条用例,设置自动调用前置、后置
1.1.conftest.py
importpytest@pytest.fixturedefdata():return[1,2,3,4,5,6]@pytest.fixture(autouse=True)# autouse自动调用defauto_print():print("这里是自动调用的前置")yieldprint("这里是自动调用的后置")
1.2.test_002.py
deftest00(data):print(data)
1.3.执行结果

2.用例
2.1.test_002.py
deftest00(data):print(data)deftest01():print("用例01运行了")deftest02():print("用例02运行了")
2.2.基于多条用例的执行效果:基于用例级别的自动调用前、后置操作