fixture 里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了
调用fixture三种方法:
- 函数或类里面方法直接传fixture的函数参数名称
- 使用装饰器@pytest.mark.usefixtures()修饰
- auto=True自动使用
用例传fixture参数
方法一:先定义start功能,用例全部传start参数,调用该功能
import time import pytest @pytest.fixture(scope="function") def start(request): print('\n---------开始执行function-------') def test_a(start): print("---------用例a执行-------“) class Test_aa(): def test_1(self, start): print('---------用例1------------‘') def test_2(self, start): print('---------用例2-------") if __name__=="__main__" pytest.main(["-s", "test_000.py"])
方法二:使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例
import time import pytest @pytest.fixture(scope="function") def start(request): print('\n---------开始执行function-------') @pytest.mark.usefixtures("start") def test_a(start): print("---------用例a执行-------“) @pytest.mark.usefixtures("start") class Test_aa(): def test_1(self, start): print('---------用例1------------‘') def test_2(self, start): print('---------用例2-------") if __name__=="__main__" pytest.main(["-s", "test_001.py"])
方法三:设置autouse=True auto 设置为True 自动调用fixture功能
- start设置scope为module级别,在当前.py用例模块只执行一次,autouse =True自动使用
- open_home设置scope 为function级别,每个用例前都调用一次,自动使用
import time import pytest @pytest.fixture(scope="module",autouse = True) def start(request): print('\n---------开始执行module-------') print('module:%s' % request.module.__name__) print('-------启动浏览器------') yield print("--------结束测试end!-----------") @pytest.fixture(scope="function",autouse = True) def open_home(request): print('function:%s \n----------回到首页--------' % request.function.__name__) @pytest.mark.usefixtures("start") class Test_aa(): def test_1(self, start): print('---------用例1------------‘') def test_2(self, start): print('---------用例2-------") if __name__=="__main__" pytest.main(["-s", "test_002.py"])