1、fixture 介绍
1、pytest 提供的 fixture 实现 unittest 中 setup/teardown 功能,可以在每次执行case之前初始化数据。2、区别:fixture 可以只在执行某几个特定case 前运行,只需要在运行case 前调用即可。比setup/teardown 使用起来更灵活。
2、fixture scope 作用范围
先看下 fixture 函数的定义:
def fixture(scope="function",params=None,autouse=False,ids=None,name=None):''''''
:arg scope: 可选四组参数:function(默认)、calss、module、package/session
:arg params: 一个可选的参数列表,它将导致多个参数调用fixture函数和所有测试使用
它。
:arg autouse: 如果为True,则fixture func将为所有测试激活可以看到它。如果为
False(默认值),则需要显式激活fixture。
:arg ids: 每个参数对应的字符串id列表,因此它们是测试id的一部分。如果没有提供
id,它们将从参数中自动生成。
:arg name: fixture的名称。 这默认为装饰函数的名称。 如果fixture在定义它的同
一模块中使用,夹具的功能名称将被请求夹具的功能arg遮蔽; 解决这个问题的一种方法是将装饰函数
命名 “fixture_<fixturename>”然后使用”@ pytest.fixture(name='<fixturename>')”。''''''
3、重点看下 scope 四组参数的意义
@pytest_allure报告.fixture()# 此装饰器相当于 setup
@pytest_allure报告.fixture(scope="function")# 此装饰器相当于 setup_function
@pytest_allure报告.fixture(scope="class")# 此装饰器相当于 setup_class
@pytest_allure报告.fixture(scope="module")# 此装饰器相当于 setup_module
@pytest_allure报告.fixture(scope="method")# 此装饰器相当于 setup_method
@pytest_allure报告.fixture(scope="session")# 此装饰器相当于 setup_session
function:每个方法(函数)都会执行一次。
class:每个类都会执行一次。类中有多个方法调用,只在第一个方法调用时执行。
module:每一个.py文件调用一次,该文件内又有多个function和class。
package/session:多个文件调用一次,可以跨.py文件调用,每个.py文件就是module。
注:session级别,此时将fixture的内容写道conftest.py文件中,所有目录下的文件只需调用一次。
注:session级别,此时将fixture的内容写道 conftest.py文件中,所有目录下的文件只需调用一次。
博客:https://blog.csdn.net/weixin_44801980/article/details/125482233
5、fixtrue_参数化演示
import pytestfrom day4_Boss_V1_3.auto_boss_v4.config import*
@pytest.fixture(scope='module',params=[(4723, xiaomi_caps),(4727, huawei_caps)]) # 作用域默认是Testdefbefore_test_module(request):"""
初始化函数:param request::return:"""
port= request.param[0] # 取元组的第一个元素作为参数
device= request.param[1]print(f'在{device}启动被测app')print(f'连接appium服务{port}')yield # 后面写清除动作print('关闭被测app')print(f'断开appium服务')defafter_test_module():"""
清除函数:return:"""print('关闭被测app')print(f'断开appium服务')# 测试用例的参数化
@pytest.mark.usefixtures('before_test_module') # 初始化函数
@pytest.mark.parametrize('psw',['123', '456'])deftest_app(psw):print('测试boss app')print(f'登录测试账号{psw}')if __name__== '__main__':
pytest.main(['l_pytest_fixtrue_参数化演示.py', '-s'])