15、pytest的fixture调用fixture

官方实例

python 复制代码
# content of test_append.py
import pytest

# Arrange
@pytest.fixture
def first_entry():
    return "a"
    
# Arrange
@pytest.fixture
def order(first_entry):
    return [first_entry]
    
def test_string(order):
    # Act
    order.append("b")
    
    # Assert
    assert order == ['a','b']
python 复制代码
# content of test_reuse_fixture.py
import pytest

# Arrange
@pytest.fixture
def first_entry():
    return "a"
    
# Arrange
@pytest.fixture()
def order(first_entry):
    return [first_entry]
    
def test_string(order):
    # Act
    order.append("b")
    
    # Assert
    assert order == ["a","b"]
    
def test_int(order):
    # Act
    order.append(2)
    
    # Assert
    assert order == ["a",2]

解读与实操

pytest最大的优势之一是其极其灵活的fixture系统。它允许我们将复杂的测试需求简化成更简单和有组织的功能,我们只需要让每个功能描述它们所依赖的东西。

pytest的fixture系统如此强大的原因之一是,它使我们能够定义一个可以反复重用的通用步骤,就像使用普通函数一样。两个不同的测试可以请求相同的fixture,并让pytest从该fixture为每个测试提供各自的结果。

这对于确保测试不受彼此影响非常有用。我们可以使用这个系统来确保每个测试都获得自己的新一批数据,并且从一个干净的状态开始,这样它就可以提供一致的、可重复的结果。

场景应用

fixture可以调用其它fixture;重复使用fixture时,每个测试都会获得不受影响的一批数据。在登录类应用时比较方便,创建一个获取token的fixture,其它测试函数重复使用这个fixture,获取鉴权。后面会说明fixture作用域,设置为类级或会话级,可以保证多次测试只请求了一个token。

相关推荐
努力搬砖的咸鱼2 天前
从零开始搭建 Pytest 测试框架(Python 3.8 + PyCharm 版)
python·pycharm·pytest
FINE!(正在努力!)4 天前
PyTest框架学习
学习·pytest
程序员杰哥4 天前
接口自动化测试之pytest 运行方式及前置后置封装
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
测试老哥5 天前
Pytest+Selenium UI自动化测试实战实例
自动化测试·软件测试·python·selenium·测试工具·ui·pytest
水银嘻嘻5 天前
07 APP 自动化- appium+pytest+allure框架封装
python·appium·自动化·pytest
天才测试猿5 天前
接口自动化测试之pytest接口关联框架封装
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
not coder6 天前
Pytest Fixture 详解
数据库·pytest
not coder7 天前
pytest 常见问题解答 (FAQ)
开发语言·python·pytest
程序员的世界你不懂7 天前
(1)pytest简介和环境准备
pytest
not coder7 天前
Pytest Fixture 是什么?
数据库·oracle·pytest