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

六 、结束语


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

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

相关推荐
圆圆讲门店3 小时前
实体获客团队|基础概念与核心要点整理
人工智能·python
砚底藏山河4 小时前
【量化纯GET实战 #04】批量快照:一次 HTTP GET 取多只股票
java·python·金融·eclipse
烂蜻蜓4 小时前
Flask入门教程(九):模板渲染——用Jinja2构建动态页面
后端·python·flask
2601_966871404 小时前
AE影视后期特效-遮罩/调色/抠像/MG动画/3D/Vlog制作(完结)jzit
python
circuitsosk4 小时前
大模型本体安全防护实践:提示词注入防御、输出合规过滤与敏感信息脱敏
python·安全·数据脱敏·纵深防御·提示词注入·llmsecurity
工业一体机老司机5 小时前
Python实现工业一体机Modbus-TCP通信-从协议解析到多设备轮询实战
开发语言·python·tcp/ip
2401_885885045 小时前
国际语音php接口代码示例:PHP使用cURL快速调用语音发送API
android·开发语言·前端·人工智能·python·php·语音识别
EW Frontier5 小时前
基于 Python + NumPy 的雷达信号处理仿真平台设计与实现——从 LFM 波形到 CFAR 检测的完整信号链
python·雷达信号处理·cfar\]·mti·mtd
axinawang5 小时前
Tesseract入门--把图片里印刷文字提取成文本
python
青 春 记 忆5 小时前
LeetCode 283. 移动零|Python 解法详解
python·算法·leetcode