setup 与 teardown 操作

章节目录:

一、概述

pytest 提供了类似 setupteardown 的方法。

  • 模块级别setup_moduleteardown_module
  • 函数级别setup_functionteardown_function,不在类中的方法。
  • 类级别setup_classteardown_class
  • 方法级别setup_methodteardown_method
  • 方法细化级别setupteardown

二、前置与后置操作

  • 代码示例
python 复制代码
import pytest


def setup_function():
    print('\n这是测试用例的前置')


def teardown_function():
    print('\n这是测试用例的后置')


def test01():
    print('\n### case1 ###')


if __name__ == '__main__':
    """
    main() 命令行参数详情:
    -s: 显示程序中的 print / logging 输出。
    -v: 丰富信息模式, 输出更详细的用例执行信息。
    -q: 安静模式, 不输出环境信息。
    -x: 出现一条测试用例失败就退出测试。调试阶段非常有用。
    -k:可以使用and、not、or等逻辑运算符,区分:匹配范围(文件名、类名、函数名)。

    当不传入参数时,相当于命令行输入 pytest。
    当传入参数 -s -v -x 时,相当于命令行输入 pytest -s -v -x。
    """

    pytest.main(['-s'])
    # 执行顺序如下:
    #
    # 这是测试用例的前置
    #
    # ### case1 ###
    # 
    # 这是测试用例的后置
  • 执行顺序优先级前置 (setup) > 后置(teardown)。

三、各函数使用场景

  • setup_module:在当前测试模块开始执行前调用一次。通常用于设置全局测试环境。
  • teardown_module:在当前测试模块执行完后调用一次。通常用于清理全局测试环境。
  • setup_function:在每个测试函数(不在类中的 方法)运行前调用一次。通常用于设置特定函数级别的测试环境。
  • teardown_function:在每个测试函数(不在类中的方法)运行后调用一次。通常用于清理特定函数级别的测试环境。
  • setup_class:在当前测试类中的所有测试方法运行前调用一次。通常用于设置类级别的测试环境。
  • teardown_class:在当前测试类中的所有测试方法运行后调用一次。通常用于清理类级别的测试环境。
  • setup_method:在每个测试类中的每个测试方法运行前调用一次。通常用于设置方法级别的测试环境。
  • teardown_method:在每个测试类中的每个测试方法运行后调用一次。通常用于清理方法级别的测试环境。
  • setup:在每个测试方法运行前调用一次。与 setup_method 类似 ,但它只在类中的方法内起作用,不会影响其他测试方法。
  • teardown:在每个测试方法运行后调用一次。与 teardown_method 类似,但它只在类中的方法内起作用,不会影响其他测试方法。

四、方法使用

  • 代码示例
python 复制代码
import pytest


def setup_module():
    print("\n===setup_module(设置全局测试环境,仅执行一次)===")


def teardown_module():
    print("\n===teardown_module(清理全局测试环境,仅执行一次)===")


def setup_function():
    print("\n===setup_function(不在类中的方法-设置特定函数级别的测试环境)===")


def teardown_function():
    print("\n===teardown_function(不在类中的方法-清理特定函数级别的测试环境)===")


def test_one():
    print("\n### case1 ###")


def test_two():
    print("\n### case2 ###")


class TestCase:
    def setup_class(self):
        print("\n===setup_class(设置类级别测试环境,仅执行一次)===")

    def teardown_class(self):
        print("\n===teardown_class(清理类级别测试环境,仅执行一次)===")

    def setup_method(self):
        print("\n===setup_method(设置方法级别的测试环境)===")

    def teardown_method(self):
        print("\n===teardown_method(清理方法级别的测试环境)===")

    def setup(self):
        print("\n===setup(与 setup_method 类似,不会影响其他测试方法)===")

    def teardown(self):
        print("\n===teardown(与 teardown_method 类似,不会影响其他测试方法)===")

    def test_three(self):
        print("\n### case3 ###")

    def test_four(self):
        print("\n### case4 ###")


if __name__ == '__main__':
    pytest.main(["-s"])
  • 调用过程
python 复制代码
test.py::test_one 
===setup_module(设置全局测试环境,仅执行一次)===

===setup_function(不在类中的方法-设置特定函数级别的测试环境)===
PASSED                                                 [ 25%]
### case1 ###

===teardown_function(不在类中的方法-清理特定函数级别的测试环境)===

test.py::test_two 
===setup_function(不在类中的方法-设置特定函数级别的测试环境)===
PASSED                                                 [ 50%]
### case2 ###

===teardown_function(不在类中的方法-清理特定函数级别的测试环境)===

test.py::TestCase::test_three 
===setup_class(设置类级别测试环境,仅执行一次)===

===setup_method(设置方法级别的测试环境)===
PASSED                                     [ 75%]
### case3 ###

===teardown_method(清理方法级别的测试环境)===

test.py::TestCase::test_four 
===setup_method(设置方法级别的测试环境)===
PASSED                                      [100%]
### case4 ###

===teardown_method(清理方法级别的测试环境)===

===teardown_class(清理类级别测试环境,仅执行一次)===

===teardown_module(清理全局测试环境,仅执行一次)===

五、总结

  1. setup_classsetup_module 执行用例时,只执行一次前置和后置。
  2. setup_classsetup_method是在类中执行的。
  3. setup_modulesetup_function是在类外执行的。
  4. 其中 setup 类中,类内外都可以执行。

六 、结束语


"-------怕什么真理无穷,进一寸有一寸的欢喜。"

微信公众号搜索:饺子泡牛奶

相关推荐
数据智能老司机2 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机3 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机3 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机3 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i3 小时前
drf初步梳理
python·django
每日AI新事件3 小时前
python的异步函数
python
这里有鱼汤5 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook14 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室14 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三16 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试