3. Pytest前置和后置运行级别
一、前言
顾名思义,前置,就是在测试用例执行前执行的动作;后置,是测试用例执行后执行的动作。前置和后置一般写一些准备操作,数据准备等等,来确保测试用例的正常执行。
二、学习目标
1.类内外执行:setup/teardown
2.类外执行:setup_module/teardown_module
,setup_function/teardown_function
3.类内执行:setup_class/teardown_class
,setup_method/teardown_method
三、知识点
1.【类内外执行:setup/teardown
】(推荐)
此前置和后置是不区分测试用例是在类中还是不在类中,两种都能用。
我们用print()打印来验证前置和后置的执行顺序。
-
语法说明:
setup/teardown:无论是类内还是类外,每个方法都会执行1次。 setup: 方法运行前执行 teardown:方法运行完才执行
-
代码示例:
# -*- coding:utf-8 -*- import pytest def setup(): '''每个用例开始前执行''' print("-----setup自动化测试开始-----") def teardown(): '''每个用例结束后执行''' print("-----teardown自动化测试结束-----") def test_case_01(): num = 1 + 1 print("打印计算结果:{}".format(num)) assert num == 2 def test_case_02(): num = 1 + 2 print("打印计算结果:{}".format(num)) assert num == 3
-
执行效果:
test_pytest_demo1.py::test_case_01 -----setup自动化测试开始----- PASSED [ 50%]打印计算结果:2 -----teardown自动化测试结束----- test_pytest_demo1.py::test_case_02 -----setup自动化测试开始----- PASSED [100%]打印计算结果:3 -----teardown自动化测试结束----- ============================== 2 passed in 0.02s ==============================
说明:从运行结果可以看出,setup在每一个测试用例执行前执行,teardown在每一个测试用例执行后执行。setup和teardown即可以在类中应用,也可以不在类中应用。这也是在项目中常用的前置和后置。
2.【类外执行:setup_module/teardown_module
,setup_function/teardown_function
】
此前置和后置只能作用于不在类中的测试用例函数。
-
语法说明:
setup_module/teardown_module: 只有前置后置方法在class外部时,才会被执行。整个.py文件只执行1次。 setup_module: 在.py文件执行前执行。 teardown_module:在.py文件执行后执行。 setup_function/teardown_function: 只有类外部的方法才会执行。每个方法执行一次。 setup_function: 类外部的方法前执行。 teardown_function: 类外部的方法后执行。
-
代码示例:
import pytest def setup_function(): '''每个用例开始前执行''' print("-----setup_function自动化测试开始-----") def teardown_function(): '''每个用例结束后执行''' print("-----teardown_function自动化测试结束-----") def setup_module(): '''整个.py 模块开始前执行''' print("-----setup_module自动化测试开始-----") def teardown_module(): '''整个.py 模块结束后执行''' print("-----teardown_module自动化测试结束-----") def test_case_01(): num = 1 + 1 print("打印计算结果:{}".format(num)) assert num == 2 def test_case_02(): num = 1 + 2 print("打印计算结果:{}".format(num)) assert num == 3
-
执行效果:
test_pytest_demo2.py::test_case_01 -----setup_module自动化测试开始----- -----setup_function自动化测试开始----- PASSED [ 50%]打印计算结果:2 -----teardown_function自动化测试结束----- test_pytest_demo2.py::test_case_02 -----setup_function自动化测试开始----- PASSED [100%]打印计算结果:3 -----teardown_function自动化测试结束----- -----teardown_module自动化测试结束----- ============================== 2 passed in 0.02s ==============================
说明:setup_module/teardown_module是模块级的前置和后置,所以在当前py模块只执行了一次。
setup_function/teardown_function是函数级的前置和后置,所以在每个用例函数分别执行了前置和后置。
3.【类内执行:setup_class/teardown_class
,setup_method/teardown_method
】
此前置和后置只能作用于在类中的测试用例函数。
-
语法说明:
setup_class/teardown_class: 只有方法在class内部时,才可以执行。class内只运行1次。 setup_class:在class类运行前执行。 teardown_class:在class类运行后执行。 setup_method/teardown_method: 只有方法在class内部时,才可以执行。class内运行多次。 setup_method: 每个method前执行一次。 teardown_method: 每个method后执行一次。
-
代码示例:
import pytest class TestCase(): def setup_method(self): '''每个用例开始前执行''' print("-----setup_method自动化测试开始-----") def teardown_method(self): '''每个用例结束后执行''' print("-----teardown_method自动化测试结束-----") def setup_class(self): '''每个类开始前执行''' print("-----setup_class自动化测试开始-----") def teardown_class(self): '''每个类结束后执行''' print("-----teardown_class自动化测试结束-----") def test_case_01(self): num = 1 + 1 print("打印计算结果:{}".format(num)) assert num == 2 def test_case_02(self): num = 1 + 2 print("打印计算结果:{}".format(num)) assert num == 3
-
运行效果:
test_pytest_demo3.py::TestCase::test_case_01 -----setup_class自动化测试开始----- -----setup_method自动化测试开始----- PASSED [ 50%]打印计算结果:2 -----teardown_method自动化测试结束----- test_pytest_demo3.py::TestCase::test_case_02 -----setup_method自动化测试开始----- PASSED [100%]打印计算结果:3 -----teardown_method自动化测试结束----- -----teardown_class自动化测试结束----- ============================== 2 passed in 0.02s ==============================
说明:setup_class/teardown_class是类级的前置和后置,所以在当前类下只执行了一次。
setup_method/teardown_method是方法级的前置和后置,所以在每个用例函数分别执行了前置和后置。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?