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 类中,类内外都可以执行。

六 、结束语


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

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

相关推荐
chao_7894 小时前
二分查找篇——搜索旋转排序数组【LeetCode】一次二分查找
数据结构·python·算法·leetcode·二分查找
烛阴4 小时前
Python装饰器解除:如何让被装饰的函数重获自由?
前端·python
noravinsc5 小时前
django 一个表中包括id和parentid,如何通过parentid找到全部父爷id
python·django·sqlite
ajassi20005 小时前
开源 python 应用 开发(三)python语法介绍
linux·python·开源·自动化
沉默媛6 小时前
如何安装python以及jupyter notebook
开发语言·python·jupyter
Deng9452013147 小时前
基于Python的旅游数据可视化应用
python·numpy·pandas·旅游·数据可视化技术
2401_878624797 小时前
pytorch 自动微分
人工智能·pytorch·python·机器学习
胖达不服输7 小时前
「日拱一码」021 机器学习——特征工程
人工智能·python·机器学习·特征工程
screenCui8 小时前
macOS运行python程序遇libiomp5.dylib库冲突错误解决方案
开发语言·python·macos
小眼睛羊羊8 小时前
pyinstaller打包paddleocr
python