【Pytest03】全网最全最新的Pytest框架快速进阶篇(fixture应用)
fixtrue修饰器标记的方法通常用于在其他函数、模块、类或者整个工程调用时会优先执行,通常会被用于完成预置处理和重复操作。例如:登录,执行SQL等操作。
完整方法如下:fixture(scope=‘function‘,params=None,autouse=False,ids=None,name=None)
参数说明:
1.scope参数:标记方法的作用域。有4个可选值:function(默认,函数)、class(类)、module(模块)、package/session(包)
(1)作用域为函数实例
import pytest @pytest.fixture(scope=‘function‘,autouse=True) def login(): print(‘登录系统‘) def test_01(): print(‘测试用例一‘) class TestCase: def test_03(self): print(‘测试用例三‘) def test04(self): print(‘测试用例四‘) if __name__ == ‘__main__‘: pytest.main([‘-s‘,‘pytest-demo.py‘])
注意:该模块中所有的函数在执行之前都会执行login函数。
(2)作用域为类实例一:
import pytest @pytest.fixture(scope=‘class‘,autouse=True) def login(): print(‘登录系统‘) def test_01(): print(‘测试用例一‘) class TestCase1: def test_03(self): print(‘测试用例三‘) def test04(self): print(‘测试用例四‘) class TestCase2: def test_05(self): print(‘测试用例五‘) def test06(self): print(‘测试用例六‘) if __name__ == ‘__main__‘: pytest.main([‘-s‘,‘pytest-demo.py‘])
注意:在TestCase1类和TestCase2类中,login方法都只会被执行一次。函数test_01也会执行一次。
(2) 作用域为类实例二:
import pytest @pytest.fixture() def login(): print(‘登录系统‘) def test_01(): print(‘测试用例一‘) @pytest.mark.usefixtures(‘login‘) class TestCase: def test_03(self): print(‘测试用例三‘) def test04(self): print(‘测试用例四‘) if __name__ == ‘__main__‘: pytest.main([‘-s‘,‘pytest-demo.py‘])
注意:此方式函数不会被执行,但是被作用的类中的每个函数执行之前都会执行一次,在测试类前面添加:@pytest.mark.usefixtures(‘login‘) 其中login为函数名。
(3)作用域为module时表示整个模块中都只会执行一次。这里不在累述。
(4)作用域为package时表示整个包都只会执行一次。这里不在累述。
(5)在N个用例中指定某一个用例执行
import pytest @pytest.fixture() def login(): print(‘登录系统‘) def test_01(): print(‘测试用例一‘) class TestCase1: def test_03(self): print(‘测试用例三‘) def test04(self,login): print(‘测试用例四‘) if __name__ == ‘__main__‘: pytest.main([‘-s‘,‘pytest-demo.py‘])
注意:test04以参数的形式传入了执行的方法login,这样来指定只有test04方法在执行时才执行login方法。
特别注意:如果在login函数中加入reutrn ‘success‘,在test04方法中加入print(login),那么print(login)打印的值就是返回的success.