fixture装饰器5个参数含义详解
@pytest.fixture(scope='',autouse='',params="",ids="",name="")
scope :
function 函数级 每一个函数或方法都会调用
class 类级别 每个测试类只运行一次
module 模块级 每一个.py文件调用一次
session 会话级 每次会话只需要运行一次,会话内所有方法及类,模块都共享这个方法
autouse :
自动执行,默认False,设置为True后再设置的执行等级里面包含的所有用例都会执行这个方法
params:
参数化
ids:
参数化时给每一个值设置变量名
name:
给被标记的方法取别名
scope 参数使用
代码
@pytest.fixture(scope='function') def my_fixture(): print("前置方法") #默认只有前置,需要后置设置yield分割 yield print('后置方法') class TestFrontBack: def test_login(self): print('点击登录') print('输入账号') print('输入密码') print('点击登录') def test_buy(self,my_fixture): print('登录界面输入账号密码') print('点击登录') print('查看商品加入购物车') print('购物车购买支付商品') print('查看账户余额')
(function)方法级别使用
如果想2个方法都执行这个前后值,可以在每个方法里面加上(self,my_fixture),但是多了就很麻烦
使用autouse自动执行,所有方法级的用例的前后值
(class)类级别使用
(module)模块级(一个py文件)别使用
代码加了一个类用于测试
@pytest.fixture(scope='module',autouse=True) def my_fixture(): print("前置方法") #默认只有前置,需要后置设置yield分割 yield print('后置方法') class TestFixture: def test_login(self): print('点击登录') print('输入账号') print('输入密码') print('点击登录') def test_buy(self): print('登录界面输入账号密码') print('点击登录') print('查看商品加入购物车') print('购物车购买支付商品') print('查看账户余额') class TestFixture2: def test(self): print("测试module级别执行,也就是一个py文件里面只执行一次")
执行结果
params参数化
代码
@pytest.fixture(scope='function',params=['1234','123477','1234785']) 固定写法 def my_fixture(request): return request.param class TestFixture: def test_login(self,my_fixture): print('点击登录') print('输入账号') print('输入密码'+str(my_fixture)) print('点击登录')
执行结果
参数化和前后置一起使用
使用yield代替return使用返回参数
ids参数:给参数取变量名
name参数 给fixture标记的方法取别名
注意:取了别名后,无法用本名找到fixture标记的方法