pytest中fixture前置后置
时间: 2025-02-14 16:18:25 浏览: 47
### 使用 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]。
阅读全文
相关推荐


















