Pytest的conftest的使⽤

Pytest的conftest的使⽤
1.当使⽤Pytest进⾏测试时 conftest.py是特殊的⽂件⽤于管理测试⽤例中 需要通⽤数据传递一.pytest.fixture装饰器1.定义简单的夹具fixtureconftest.pyimportpytestpytest.fixturedefsetup_data():return[1,2,3,4,5]2.在conftest.py中定义了⼀个名为setup_data的夹具3.这个夹具可以在测试用例的模块(test_001.py)中被使⽤4.test_001.pydeftest_sum(setup_data):#这里接收的参数是ttconftest.py 中定义的函数#断言求和的值等于15assertsum(setup_data)15deftest_traversal(setup_data):#这里接收的参数也是ttconftest.py 中定义的函数#断言i对应的数字变量存在于setup_data函数中foriinsetup_data:assertiinsetup_data5.然后执行上面的两条测试用例(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.可以传递⼀个可迭代对象每个元素都会作为参数值调⽤ fixture2.3.autouse⾃动使⽤fixture⽆需在测试函数中显式声明使⽤该fixture2.3.1.可以设置为True或False2.4.name为fixture指定⼀个⾃定义名称⽤于在测试报告和⽇志中标识fixture2.5.其他参数可以根据需要添加其他⾃定义参数供fixture函数使⽤①pytest.fixture参数为scope1.基于类级别设置为自动调用前置、后置设置参数为scopeclass即可1.1.但除了声明的类函数也同样会执行1.2.conftest.pyimportpytestpytest.fixturedefdata():return[1,2,3,4,5,6]pytest.fixture(autouseTrue,scopeclass)#设置自动调用前、后置且级别为类defauto_print():print(这里是自动调用的前置)yieldprint(这里是自动调用的后置)1.3.执行效果2.基于模块级别设置为自动调用前置、后置设置参数为scopemodule即可2.1.conftest.pyimportpytestpytest.fixturedefdata():return[1,2,3,4,5,6]pytest.fixture(autouseTrue,scopemodule)#设置自动调用、且为模块级别defauto_print():print(这里是自动调用的前置)yieldprint(这里是自动调用的后置)2.2.执行效果 与上面提到的模块级别的setup和teardown函数的作用是一样的1个模块2.3.基于用例项目根目录下多个模块执行的效果(两个模块共6条用例)3.基于文件级别设置为自动调用前置、后置设置参数为scopesession即可3.1.文件级别针对的是用例根目录下的所有用例模块3.2.conftest.pyimportpytestpytest.fixturedefdata():return[1,2,3,4,5,6]pytest.fixture(autouseTrue,scopesession)#设置自动调用、且为文件级别defauto_print():print(这里是自动调用的前置)yieldprint(这里是自动调用的后置)3.3.还是两个模块3.4.执行效果②pytest.fixture参数化params1.在conftest文件中执行参数传给对应模块的用例1.1.conftest.pyimportpytestpytest.fixture(params[a,b,c])defparams(request):returnrequest.param1.2.test_002.pydeftest_(params):print(params)1.3.执行结果1.4.也可以给参数自定义名称③pytest.fixture参数为autouse1.基于一条用例设置自动调用前置、后置1.1.conftest.pyimportpytestpytest.fixturedefdata():return[1,2,3,4,5,6]pytest.fixture(autouseTrue)# autouse自动调用defauto_print():print(这里是自动调用的前置)yieldprint(这里是自动调用的后置)1.2.test_002.pydeftest00(data):print(data)1.3.执行结果2.用例2.1.test_002.pydeftest00(data):print(data)deftest01():print(用例01运行了)deftest02():print(用例02运行了)2.2.基于多条用例的执行效果基于用例级别的自动调用前、后置操作