文章目录
- Pytest 固件核心概念
- Pytest 固件原理
- Pytest 固件分类
- 方法级
- 函数级
- 类级
- 模块级
- 夹具优先级
- 测试用例执行优先级
- 固件不仅如此后续大有文章

Pytest 固件核心概念
在
pytest测试框架中,固件是一个核心概念;它是一种特殊的函数,用于在测试之前和之后设置和清理测试环境。
固件可以确保测试在一致和可预测的环境中执行,同时它们也可以跨多个测试函数、类和会话共享。
官方标注叫固件,但这词不太好理解,大家都称之为
夹具,想象一下汉堡包就明白夹具的含义了。
Setup(设置):
- 在
pytest中,setup通常指的是在每个测试之前执行的一些准备工作,例如初始化变量、打开文件、连接到数据库等。setup方法可以定义在测试模块、测试类、测试函数或测试方法级别。Teardown(拆卸):
teardown是指在每个测试执行完成后进行的一些清理工作,例如关闭文件、断开数据库连接、释放资源等。- 和
setup一样,teardown方法也可以定义在测试模块、测试类、测试函数或测试方法级别。
Pytest 固件原理
检索和执行固件:
当
pytest遇到一个测试函数或方法时,会根据作用域规则来检索并执行相应的setup方法。
setup方法用于在每个测试之前设置测试环境。一旦测试函数或方法执行完毕,
pytest会按照相反的作用域顺序执行相应的teardown方法。
teardown方法用于在每个测试之后清理测试环境固件作用域:
setup和teardown方法的作用域决定了它们在哪里被调用。pytest支持以下作用域:- 函数级(function scope):
setup和teardown仅在单个测试函数或方法之前和之后执行。- 类级(class scope): 如果在一个测试类中定义了
setup_class和teardown_class方法,则这些方法会在类中的所有测试方法之前和之后执行一次。- 模块级(module scope): 如果在模块级别定义了
setup_module和teardown_module方法,则这些方法会在整个模块中的所有测试之前和之后执行一次。- 会话级(session scope):
setup_session和teardown_session在整个测试会话开始时和结束时执行一次。固件执行顺序:
- 当存在多个作用域级别的
setup和teardown方法时,它们的执行顺序遵循以下规则:- 会话级:
setup_session-> 测试 ->teardown_session- 模块级:
setup_module-> 模块内测试 ->teardown_module- 类级:
setup_class-> 类内测试 ->teardown_class- 函数级:
setup-> 测试函数 ->teardown
Pytest 固件分类
| 类型 | 函数 | 描述 |
|---|---|---|
方法级 | setup_method / teardown_method | 在类中的每个测试方法之前/之后执行 |
函数级 | setup_function / teardown_function | 在类外的每个测试函数之前/之后执行 |
类级 | setup_class / teardown_class | 在类中的所有测试方法运行之前/之后执行一次 |
模块级 | setup_module / teardown_module | 在整个模块的所有测试运行之前/之后执行一次 |
方法级

函数级

类级

模块级

夹具优先级

测试用例执行优先级
示例代码
import pytestdef addition(x, y):return x + ydef test_01_a():print("正在执行 test_a 函数...")assert addition(3, 5) == 8class TestClassCase01:@staticmethoddef setup_method():print('\nsetup_method被调用,前置执行')@staticmethoddef teardown_method():print('\nteardown_method被调用,后置执行')def test_01_b(self):assert "a" in "apple"def test_01_e(self):assert "p" in "apple"def test_01_d(self):assert "l" in "apple"def test_01_c(self):assert "e" in "apple"if __name__ == '__main__':pytest.main()
执行结果

固件不仅如此后续大有文章
暂略