setup 与 teardown 操作

章节目录:

一、概述

pytest 提供了类似 setup、teardown 的方法。

  • 模块级别 :setup_module、teardown_module。
  • 函数级别 :setup_function、teardown_function,不在类中的方法。
  • 类级别 :setup_class、teardown_class。
  • 方法级别 :setup_method、teardown_method。
  • 方法细化级别 :setup、teardown。

二、前置与后置操作

  • 代码示例:
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_class 和 setup_module 执行用例时,只执行一次前置和后置。
  2. setup_class,setup_method是在类中执行的。
  3. setup_module,setup_function是在类外执行的。
  4. 其中 setup 类中,类内外都可以执行。

六 、结束语


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

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

相关推荐
老歌老听老掉牙4 小时前
空间曲线数据的拼接与几何变换分析
python·曲线
databook8 小时前
使用 SciPy 库进行时间序列分析
python·数据分析·scipy
java资料站8 小时前
十一、评估测试
开发语言·人工智能·python
szial8 小时前
网络爬虫与 CDP 实战(二):浏览器能访问,Python 却被拒绝?拆开登录态与 CSRF
爬虫·python·csrf
青少儿编程课堂9 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
怕浪猫10 小时前
LLM 面试必问的 8 个问题,答不上来直接淘汰
人工智能·python·面试
老歌老听老掉牙11 小时前
从三维旋转的深度解析到Python实现:绕任意轴旋转的奥秘
python·三维旋转
打工仔折腾 AI11 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
梦幻精灵_cq11 小时前
sumdir——一个伪python.built-in的“术法”打造
python
weixin_4407305013 小时前
函数return、参数、参数组、递归函数、高阶函数等小结
开发语言·python