pytest_框架(5) - fixture实现自定义前置、后置

fixture实现自定义前置、后置

阅读目录:
1. 自定义前置(setup)、后置(teardown)
2. 示例:仅test_example_class_1和test_example_class_2需要前置登录、 后置登出
3. 若yield 前面的代码出现异常,yield后面的代码不会执行
4. 若测试用例出现异常,yield前后的代码都会执行

自定义前置(setup)、后置(teardown)

  1. fixture 可以实现自定义测试用例的前置、后置,是通过yield来区分的, 前后置均可单独存在
  2. 写在yield 前面的是 前置条件, 写在yield 后面的是 后置条件
  3. 如果yield 前面的代码异常,则yield后面的代码不会执行; 但是若测试用例出现异常, yield 前后的代码还是都会运行
示例: 仅提test_a 和 test_b需要 前置登录 后置登出

方法一:yield

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : zcs
# @wx :M_Haynes
# @Blog :  

import pytest
 
import pytest  
  
## 方法一: yield@pytest.fixture()  
def setup_teardown():  
  
### 使用 Fixture 实现 Setup 和 Teardown 在 `pytest` 中,通过使用 `fixture` 可以方便地实现测试用例的前置条件(setup)和后置处理(teardown)。这种方式不仅简化了代码结构,还提高了代码的可读性和维护性。 #### 基本概念 - **Fixture**: 是一种特殊的函数,在测试执行前或后提供必要的环境准备或资源清理工作。 - **Scope**: 定义了 fixture 的生命周期,常见的有 `'function'`, `'class'`, `'module'`, 和 `'session'`。 - **Yield**: 在 fixture 函数中使用 `yield` 关键字分隔 setup 和 teardown 部分。`yield` 之前的语句作为 setup 操作被执行;`yield` 后面的内容则会在对应的测试完成之后作为 teardown 被触发[^1]。 #### 示例代码展示 下面是一个简单的例子,展示了如何利用 `fixture` 来管理浏览器实例的生命期: ```python import pytest from selenium import webdriver @pytest.fixture(scope="function", autouse=True) def browser(): """创建并返回 WebDriver 对象""" print("\nStarting Chrome Browser...") driver = webdriver.Chrome() yield driver # 浏览器关闭逻辑放在 yield 后面 print("\nClosing Chrome Browser.") driver.quit() def test_search(browser): """打开百度首页,并验证页面标题包含 '百度' """ url = "https://www.baidu.com" expected_title = "百度" browser.get(url) actual_title = browser.title assert expected_title in actual_title, f"Expected '{expected_title}' but got '{actual_title}'" ``` 在这个例子中,定义了一个名为 `browser` 的 fixture,其作用域设定为每次测试函数(`scope="function"`), 并且自动应用于所有测试 (`autouse=True`)。当任何依赖此 fixture 的测试开始时,会先启动一个新的 Chrome 浏览器实例;而在该次测试结束后,则会自动调用 `driver.quit()` 方法来终止这个浏览器进程[^4]。 #### 更复杂的场景 对于更复杂的应用程序状态初始化或者外部服务连接等情况,也可以采用类似的模式来进行封装。比如数据库连接池、API客户端配置等都可以放入到 fixtures 当中去统一管理和释放资源[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周承森

敲键盘不易~ 给点鼓励~ 感恩

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值