【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.

相关推荐