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 作为参数传递给测试用例,方便依赖注入 无法直接传递,依赖关系需要手动管理
适用场景 适用于复杂的测试用例、跨多个测试函数共享资源的情况 适用于简单的测试用例
相关推荐
Lucifer__hell4 小时前
【测试】Axure原型的AI测试用例生成方案
人工智能·测试用例·axure
测试19985 小时前
Selenium自动化测试框架的搭建
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
川石课堂软件测试7 小时前
AI如何赋能软件测试行业的发展
人工智能·python·功能测试·网络协议·单元测试·测试用例·prometheus
拥春飞翔1 天前
AI 生成测试用例:测试知识库选「开源向量库」还「Git+Markdown」?
人工智能·git·测试用例
AC赳赳老秦2 天前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw
姚青&2 天前
软件测试基础概念
单元测试·pytest
道长爱睡懒觉3 天前
车载测试用例的编写方法和项目流程
测试用例
AC赳赳老秦4 天前
OpenClaw二次开发实战:编写专属办公自动化技能,适配个性化需求
linux·javascript·人工智能·python·django·测试用例·openclaw
旦莫5 天前
测试工程师如何用AI生成测试用例?我的提示词模板分享
人工智能·python·测试开发·自动化·测试用例·ai测试
lifewange5 天前
沪深 A 股开户流程测试用例(2026 线上版)
测试用例