文章目录
- 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()
执行结果
固件不仅如此后续大有文章
暂略