pytest测试框架使用基础04 fixture用法

本文详细介绍了pytest中的fixture概念,以及其四种不同scope(function、class、module、session)的应用,强调了fixture在测试准备和清理工作中的作用,并通过实例展示了各scope下fixture的执行次数。
摘要由CSDN通过智能技术生成

一、fixture是什么

fixture是pytest用于将测试前后进行预备、清理工作的代码处理机制。
相较于setup和teardown而言,有以下几点优势:

  1. fixture命名更加灵活,局限性较小
  2. conftest.py配置里面可以实现数据共享,不需要import就能自动找到一些配置

二、fixture的scope

  1. (scope=“function”) 每一个函数或方法都会调用,默认就是function
@pytest.fixture(scope='function')
def func1():
    print("function级别的前置操作:func1")

def test_one(func1):
    expect = 1
    actual = 1
    assert expect == actua

执行后,在用例调用前会执行fixture里的操作:
在这里插入图片描述

  1. (scope=“class”) 每一个类调用一次
# 示例:1、先定义一个fixture。这个fixture的函数不需要test_开头命名
import pytest


@pytest.fixture(scope='class', autouse=True)
def func2():
    print('class 级别的前置操作:func2')


# 2、在用例里调用这个fixture
class TestClassFixture:
    def test_one(self):
        expect = 1
        actual = 1
        print('ok')
        assert actual == expect

    def test_two(self):
        expect = 1
        actual = 1
        assert actual == expect

虽然类中有2个方法,但fixture的scope是class,因此只执行一次。
在这里插入图片描述

  1. (scope=“module”) 每一个.py文件调用一次
# 示例:1、先定义一个fixture。scope为module
import pytest


@pytest.fixture(scope='module', autouse=True)
def f_module():
    print('module级别的前置操作。')


# 2、py文件中定义一个class一个函数
class TestClassFixture:
    def test_one(self):
        expect = 1
        actual = 1
        print('ok')
        assert actual == expect

    def test_two(self):
        expect = 1
        actual = 1
        assert actual == expect


def test_three(self):
    expect = 1
    actual = 1
    assert actual != expect

可以看到,虽然.py文件下存在一个类和一个函数。但只执行了一次前置操作
在这里插入图片描述

  1. (scope=“session”) 是多个文件调用一次
    文件结构:
    在这里插入图片描述
    一级目录(根目录): Pytest_session
    二级目录: scriptes
    三级目录: test_demo01.py
def test_demo01(login):
    print("scripts包内的第一个测试用例")

三级目录: test_demo02.py

def test_demo02(login):
    print("scripts包内的第二个测试用例")

二级目录: tests
三级目录: test_demo01.py

def test_demo01(login):
    print("tests包内的第一个测试用例")

三级目录: test_demo02.py

def test_demo02(login):
    print("tests包内的第二个测试用例")

二级目录:conftest.py

import pytest

@pytest.fixture(scope="session")
# @pytest.fixture(scope="module")
def login():
    print("正在登陆")
    return "login"

二级目录:test_demo.py

def test_demo(login):
    print("包外的测试用例")
  • 运行结果:
    在这里插入图片描述
  • 结果分析
    通过上述结果,可以看到整个测试周期,login只运行一次,所以session的作用域范围是最大的,且是整个测试周期只会运行一次的
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值