pytest的fixture()函数中的参数详解

一、概述

pytest测试框架中,@pytest.fixture()是一个非常重要的装饰器,它允许你定义一些在测试函数或测试类之间共享的设置和清理代码。这些设置和清理代码通常包括创建测试数据、设置测试环境、关闭数据库连接等。

二、参数解读

1.scope:

定义fixture的作用域。可能的值有:function(默认),classmodulepackagesession

  • function:每个测试函数都会运行一次fixture。
  • class:每个测试类都会运行一次fixture(但每个测试方法不会)。
  • module:每个模块都会运行一次fixture(但模块内的每个测试类或函数不会)。
  • package:每个包都会运行一次fixture(但包内的每个模块或测试类或函数不会)。
  • session:整个测试会话期间只运行一次fixture(即所有测试运行之前和之后)。
2.params:
  • 允许为fixture指定多个参数值,并为每个参数值运行测试函数。
  • 这使得可以使用fixture来参数化测试。
3.autouse
  • 如果设置为True,则fixture会自动应用到所有使用它的测试函数上,无需显式传递。
  • 这通常用于那些每个测试用例都使用的fixture。
4. ids
  • params结合使用,允许为每个参数化值提供一个明确的ID。
  • 这使得在测试报告中更容易识别每个参数化测试。
5. returns

        fixture函数的返回值会传递给测试函数,通常是通过fixture名称作为参数传递的。

四、举例说明

这个例子中,setup_module fixture在模块级别运行,因此它只会在模块中的所有测试函数之前运行一次,并在所有测试函数之后运行一次清理代码。而两个测试函数都通过参数接收了

import pytest  
  
@pytest.fixture(scope="module")  
def setup_module():  
    print("Module setup")  
    # 这里可以放置模块级别的设置代码  
    yield  
    print("Module teardown")  
    # 这里可以放置模块级别的清理代码  
  
def test_function_1(setup_module):  
    print("Running test_function_1")  
    # 测试函数使用fixture  
  
def test_function_2(setup_module):  
    print("Running test_function_2")  
    # 测试函数也使用fixture  
  
# 由于scope设置为"module",setup_module只会在模块开始时运行一次,  
# 并在模块中的所有测试函数运行完毕后运行一次teardown代码。

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest.fixture装饰器是pytest测试框架的一个重要特性,用于定义测试用例的共享资源或者测试环境的初始化和清理操作。通过使用fixture装饰器,我们可以在测试用例方便地使用这些共享资源。 fixture装饰器可以应用在函数、类或者模块级别上,它的作用是将被装饰的函数或者方法转变为一个fixture对象。fixture对象可以在测试用例作为参数进行调用,pytest会自动根据参数名匹配相应的fixture对象,并将其传递给测试用例。 fixture装饰器可以接受一些参数来定制其行为,例如scope参数用于指定fixture的作用域,autouse参数用于指定是否自动使用fixture等。 下面是一些常见的fixture用法: 1. 无参数fixture: ```python import pytest @pytest.fixture def setup(): # 初始化操作 yield # 清理操作 def test_example(setup): # 使用setup fixture assert 1 + 1 == 2 ``` 2. 带参数fixture: ```python import pytest @pytest.fixture def setup(request): # 初始化操作 def teardown(): # 清理操作 request.addfinalizer(teardown) def test_example(setup): # 使用setup fixture assert 1 + 1 == 2 ``` 3. fixture作用域: ```python import pytest @pytest.fixture(scope="module") def setup_module(): # 模块级别的初始化操作 yield # 模块级别的清理操作 @pytest.fixture(scope="function") def setup_function(): # 函数级别的初始化操作 yield # 函数级别的清理操作 def test_example(setup_module, setup_function): # 使用setup_module和setup_function fixture assert 1 + 1 == 2 ``` 通过使用fixture装饰器,我们可以更加灵活地管理测试用例的共享资源和测试环境的初始化和清理操作,提高测试用例的可维护性和可重复性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值