【pytest 学习笔记】pytest 黑科技:一招搞定测试的「准备」与「打扫」

pytest 黑科技:一招搞定测试的「准备」与「打扫」
—— 用 Fixture 优雅管理测试环境


引言

想象你在厨房做菜:
🔪 准备阶段:洗菜、切菜、热锅(测试初始化)
👨‍🍳 烹饪阶段:正式下锅(执行测试)
🧹 清理阶段:洗碗、擦灶台(资源回收)

pytest 的 Fixture 就是你的智能厨房管家,帮你自动化管理全流程!


核心机制图解

pytestFixtureTestCase触发 setup()执行 yield 前的代码初始化操作(如启动数据库)运行测试逻辑执行断言返回 yield 位置执行 yield 后的代码清理操作(如关闭连接)pytestFixtureTestCase

三步上手 Fixture

1️⃣ 定义 Fixture

@pytest.fixture 声明环境管理器:

import pytest

@pytest.fixture(scope="module")  # 🎯 作用域控制
def db_conn():
    print("🔌 连接数据库")  # 准备阶段
    conn = create_connection()
    yield conn  # ✨ 魔法分割线
    print("♻️ 关闭连接")   # 清理阶段
    conn.close()
2️⃣ 调用 Fixture

测试函数通过同名参数自动获取:

def test_query(db_conn):  # 自动注入 db_conn
    data = db_conn.query("SELECT * FROM users")
    assert len(data) > 0  # ✅ 测试逻辑
3️⃣ 执行效果
🔌 连接数据库  # 先执行 yield 前代码
TEST: test_query...  # 执行测试
♻️ 关闭连接   # 最后执行 yield 后代码

Fixture 作用域详解

控制资源复用频率,避免重复开销:

作用域生命周期典型场景代码示例
function每个测试函数独立临时文件创建@pytest.fixture()
class测试类内共享浏览器初始化scope="class"
module同 Python 文件共享数据库连接scope="module" (最常用)
session全局会话共享登录凭证scope="session"

💡 黄金法则:作用域越大,执行频率越低,测试速度越快!


思维导图:Fixture 核心能力

在这里插入图片描述


真实场景案例

🌐 Web 测试模板
@pytest.fixture(scope="module")
def browser():
    driver = ChromeDriver()  # 启动浏览器
    driver.login("admin", "123456")  # 全局登录
    yield driver
    driver.quit()  # 关闭浏览器

def test_search(browser):
    browser.search("pytest教程")
    assert "官方文档" in browser.page_source

def test_cart(browser):
    browser.add_to_cart("VIP会员")
    assert "支付成功" in browser.title

总结

  • 🪄 yield 是灵魂:1 行代码分离准备/清理阶段
  • 🧩 作用域控制:4 种模式精准匹配测试需求
  • 🤖 自动注入:同名参数自动触发 Fixture
  • 🚀 效率提升:复用资源加速测试执行

终极心法:Fixture = 环境管理员 + 资源调度师 + 清洁工!


彩蛋:组合使用 @pytest.mark.parametrize 与 Fixture,可轻松实现 参数化环境配置,解锁更复杂的测试场景!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值