一、概述
在pytest
测试框架中,@pytest.fixture()
是一个非常重要的装饰器,它允许你定义一些在测试函数或测试类之间共享的设置和清理代码。这些设置和清理代码通常包括创建测试数据、设置测试环境、关闭数据库连接等。
二、参数解读
1.scope:
定义fixture的作用域。可能的值有:function
(默认),class
,module
,package
,session
。
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代码。