Pytest 测试用例生命周期管理-fixture

一. 生命周期简介

在 pytest 中,测试用例的生命周期所指的是,用例执行前的准备条件以及执行过程中乃至结束后的环境条件的清理的一系列过程的管理,比如前面学的setup/teardown 函数的作用域,本身就是一种生命周期的表现形式

  • 测试用例生命周期管理的步骤

    🔹 准备(Setup):在测试函数执行之前,可以通过配置进行初始化工作。可以使用 setup 或者 fixture 等相关测试装置。

    🔹 执行(Test Execution):pytest 执行测试函数,并进行断言验证。

    🔹 清理(Teardown):测试函数执行完后,可以通过配置进行清理工作。可以使用 teardown 或者 fixture 等相关测试装置。


二. fixture 生命周期管理

fixture 是 pytest 中提供的一种机制,用于在测试函数执行前进行资源的准备,在测试完成后进行清理操作。fixture 更加灵活,支持不同的作用域、依赖注入和自动清理。

Pytest 的 fixture 功能使测试编写变得更加灵活、模块化和可维护,它是 Pytest 的核心特性之一。

使用步骤

  • 定义 fixture:定义一个函数,在其上方使用 @pytest.fixture 装饰器,这样就定义好了一个 fixture 函数。

  • 使用 fixture:将 fixture 函数的函数名作为参数传递给测试用例,pytest 会自动注入该 fixture。在该测试用例执行之前,会自动执行 fixture。类似于 setup 的操作。

实战案例

  • 场景: 测试⽤例执⾏时,有的⽤例需要登录才能执⾏,有些⽤例不需要登录。setup ⽆法满⾜。需要使用 fixture,它的默认作用域为 function,每个测试用例都使用新的 fixture 实例。

  • 步骤

    • 1.导⼊ pytest

    • 2.在登录的函数上⾯加 @pytest.fixture()

    • 3.在要使⽤登录前提的测试⽅法中传⼊(登录函数名称),就先登录

    • 4.不传⼊的就不登录直接执⾏测试⽅法。

  • 代码示例

    python 复制代码
    import pytest
    
    
    # 默认作用域
    @pytest.fixture()
    def login():
        print("完成登录操作")
        return 200
    
    
    def test_search():
        print("搜索")
    
    
    def test_cart(login):
        assert login == 200
        print("购物车")
    • 运行结果

三. fixture 作用域

pytest 允许控制 fixture 的 作用域。常见的作用域有 function(默认)、module、class、package 和 session。

  • 使用步骤:将 @pytest.fixture() 中的 scope 参数设置成对应的作用域取值。
    • 举例 : @pytest.fixture(scope="function")
取值 范围 对比说明
function 函数级 默认作用域,每一个函数或方法都会调用,每个测试函数都会创建一个新的 fixture 实例
class 类级别 每个测试类只运行一次,同一类内的所有测试方法共享同一个 fixture 实例
module 模块级 每一个 py 文件调用一次,同一模块内的所有测试函数共享同一个 fixture 实例
package 包级 每一个 python 包只调用一次,同一包内的所有测试函数共享同一个 fixture 实例
session 会话级 每次会话只需要运行一次,会话内所有方法及类,模块都共享同一个 fixture 实例

四. fixture 与 setup teardown 的区别

特性/功能 fixture setup/teardown
定义方式 使用 @pytest.fixture 装饰器定义 在测试类中定义 setup 和 teardown 方法
作用范围 可以通过 scope 控制作用域 需要修改方法名称来修改作用域
资源管理方式 支持资源的初始化与清理,可以在 fixture 中使用 yield 来分隔设置和清理部分 通过 setup 进行资源初始化,通过 teardown 进行清理
灵活性 高,支持作用域、依赖关系、参数化等高级功能 相对较低,在作用域范围内自动全部生效
参数化支持 支持参数化,可以用不同的数据集多次执行测试 不支持内建的参数化功能
测试函数之间的共享 可以跨多个测试函数、模块、类甚至整个会话共享资源 每个测试方法之间的资源是独立的,不能共享
测试用例依赖 支持多个 fixture 作为参数传递给测试用例,方便依赖注入 无法直接传递,依赖关系需要手动管理
适用场景 适用于复杂的测试用例、跨多个测试函数共享资源的情况 适用于简单的测试用例
相关推荐
我的xiaodoujiao12 小时前
API 接口自动化测试详细图文教程学习系列20--结合Pytest框架使用
python·学习·测试工具·pytest
icsocket18 小时前
手机LPDDR5芯片245/315/496/1295引脚核心定义与测试座适配选型
智能手机·测试用例
测试秃头怪18 小时前
接口测试与常用接口测试工具详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
测试员周周20 小时前
【AI测试路线图2】功能测试转 AI 测试:4~5 个月,一条最稳的路
开发语言·人工智能·python·功能测试·测试工具·单元测试·pytest
我的xiaodoujiao1 天前
API 接口自动化测试详细图文教程学习系列19--添加封装其他的方法
开发语言·python·学习·测试工具·pytest
CesareCheung1 天前
如何用trare调用自动生成用例skill
测试用例
小卓(friendhan2005)2 天前
基于 Pytest + Requests + Allure 的博客系统API自动化测试实践
pytest
测试员周周2 天前
【Appium 系列】第12节-智能路由 — API测试 vs UI 测试的自动选择
开发语言·人工智能·python·功能测试·ui·appium·测试用例
99乘法口诀万物皆可变2 天前
UDS诊断测试用例评审方法论:以BMS产品为例的六大维度与改进路线图
网络·测试用例