接口自动化测试(十二)—环境初始化与清除(fixture)

  • Post author:
  • Post category:其他


使用@pytest.fixture() 装饰器,实现pytest框架下测试用例的环境初始化与清除操作

(1)fixture默认是函数级别,可用级别:function,class,module,session

(2)可以写多个初始化与清除函数,测试函数需要使用只需要传入对应函数名即可

import pytest

# 默认函数级别
@pytest.fixture()
def start_func1(request):
    # 初始化代码
    print("------------初始化操作--------------")

    def fin():
        # 清除代码
        print("--------------环境清除操作------------")

    request.addfinalizer(fin)


1.函数级别:

(1)初始化与清除操作,只要传入测试函数,就会被执行

(2)初始化操作在测试用例执行之前执行,清除操作在用例执行之后执行

import pytest


@pytest.fixture()
def start_func1(request):
    # 初始化代码
    print("------------初始化操作--------------")

    def fin():
        # 清除代码
        print("--------------环境清除操作------------")

    request.addfinalizer(fin)


def test_01():
    print("-----test01-----")


def test_02(start_func1):
    print("-----test02-----")


def test_03(start_func1):
    print("-----test03-----")


if __name__ == '__main__':
    pytest.main(["func-fixture.py", "-s"])

运行结果:


2.class级别:

(1)scope=”class”

(2)同一个测试类内:同一个初始化和清除函数只会执行一次,清除操作会在这个类内所有测试用例执行完之后才执行

import pytest

"""
@pytest.fixture(scope="class")  
1.class级别
2.初始化方法是写在类外面的
3.可以作用于多个类,多个方法
4.一个方法可以传入多个初始化函数
5.跟函数级别的区别是:函数传入就会执行,类内只会执行一次

"""


@pytest.fixture(scope="class")
def start_func1(request):
    print("----初始化操作1------")

    def fin():
        print("-----环境清除操作1------")

    request.addfinalizer(fin)


@pytest.fixture(scope="class")
def start_func2(request):
    print("----初始化操作2------")

    def fin():
        print("-----环境清除操作2------")

    request.addfinalizer(fin)


class TestClass1:
    def test_01(self, start_func1):
        print("-----test01----")

    def test_02(self):
        print("-----test02-----")


class TestClass2:
    def test_03(self, start_func1, start_func2):
        print("-----test03----")

    def test_04(self, start_func1):
        print("-----test04-----")


if __name__ == '__main__':
    pytest.main(["class-fixture.py", "-s"])

运行结果:


3.module级别:

(1)score=”module”

(2)如果一个模块内部同时有测试函数和测试类需要调用初始化函数,装饰器级别需要调整为module

(3)初始化操作只会在第一次传参的时候执行一次,清除操作会在所有测试用例执行完之后,执行一次

import pytest

"""
@pytest.fixture(scope="module")  
1.module级别
2.初始化方法是写在类外面的
3.初始化方法可作用在测试函数和测试类上
4.只会执行一次

"""


@pytest.fixture(scope="module")
def start_func1(request):
    print("----初始化操作1----")

    def fin():
        print("------环境清除操作-------")

    request.addfinalizer(fin)


class TestClass1:
    def test_01(self):
        print("-----test01----")

    def test_02(self, start_func1):
        print("-----test02-----")


def test_func(start_func1):
    print("----我是一个函数--------")


if __name__ == '__main__':
    pytest.main(["module-fixture.py", "-s"])

运行结果:


4.session级别(package级别):

(1)需要创建package包

(2)package包下面创建一个文件:conftest(文件名称不可以改),里面写环境初始化与操作

import pytest


@pytest.fixture(scope="session", autouse=True)
def start_func1(request):
    print("-----初始化操作------1")

    def fin():
        print("---------测试完成的环境清除操作--------------")

    request.addfinalizer(fin)

(3)初始化操作会在package下面的测试模块执行之前执行,只执行一次

(4)清除操作会在package下面的测试模块执行完成后执行,只执行一次

(5)autouse=True,package下面的模块不需要再手动传参



版权声明:本文为qq_19982677原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。