【测试框架篇】单元测试框架pytest(5):setup和teardown的详细使用

news/2025/3/13 20:40:03/

一、前言

用过unittest的童鞋们应用都知道,有两个前置方法,两个后置方法如下:

  • setup()
  • setupClass()
  • teardown()
  • teardownClass()

Pytest也提供了类似于setup、teardown的方法,并且还超过四个,一共有十种分级别的方法:

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

二、代码

用过unittest的童鞋,对这个前置、后置方法应该不陌生了,我们直接来看代码和运行结果

python">#!/usr/bin/env python
# -*- coding: utf-8 -*-import pytestdef setup_module():print("=====整个.py模块开始前只执行一次:打开浏览器=====")def teardown_module():print("=====整个.py模块结束后只执行一次:关闭浏览器=====")def setup_function():print("===每个函数级别用例开始前都执行setup_function===")def teardown_function():print("===每个函数级别用例结束后都执行teardown_function====")def test_one():print("one")def test_two():print("two")class TestCase():def setup_class(self):print("====整个测试类开始前只执行一次setup_class====")def teardown_class(self):print("====整个测试类结束后只执行一次teardown_class====")def setup_method(self):print("==类里面每个用例执行前都会执行setup_method==")def teardown_method(self):print("==类里面每个用例结束后都会执行teardown_method==")def setup(self):print("=类里面每个用例执行前都会执行setup=")def teardown(self):print("=类里面每个用例结束后都会执行teardown=")def test_three(self):print("three")def test_four(self):print("four")if __name__ == '__main__':pytest.main(["-q", "-s", "-ra", "setup_teardown.py"])

执行结果

注意,从执行结果我们可以看到:

  • 模块级别:setup_module、teardown_module,只执行一次,在整个.py模块开始前和结束后都需要;
  • 函数级别:setup_function、teardown_function,不在类中的方法,主要取决于有几个函数级别用例,有几个就执行几次,在每个函数级别用例开始前和结束后都需要;
  • 类级别:setup_class、teardown_class,整个测试类开始前和结束后执行一次;
  • 方法级别:setup_method、teardown_method,取决于类里面有多少测试用例,类里面每个测试用例开始前和结束后都需要执行一次;
  • 方法细化级别:setup、teardown,跟前面方法级别使用类似,不过细化级别需要先执行;

http://www.ppmy.cn/news/1578877.html

相关文章

跨越时空的对话:图灵与GPT-4聊AI的前世今生

(背景:虚拟咖啡厅,图灵身着1950年代西装,端着一杯热茶,GPT-4以全息投影形态坐在对面) 图灵(喝了口茶):“听说你能写诗?我当年在布莱切利园破解Enigma时&…

Ubuntu 22.04 无法进入图形界面的解决方法

Ubuntu 22.04 无法进入图形界面,只能进入 tty,可能是由于图形界面相关的配置或驱动程序出现了问题。以下是一些常见的解决方法: 1. 检查图形界面服务状态 首先,检查图形界面服务(通常是 gdm 或 lightdm)的…

Flutter 学习之旅 之 flutter 不使用插件,实现简单自定义弹窗PopupDialog功能

Flutter 学习之旅 之 flutter 不使用插件,实现简单自定义弹窗PopupDialog功能 目录 Flutter 学习之旅 之 flutter 不使用插件,实现简单自定义弹窗PopupDialog功能 一、简单介绍 二、PopupDialog 三、简单案例实现 四、关键代码 一、简单介绍 Flutt…

网络安全linux命令

文章目录: 一:网络信息安全简介 二:网络中存在的威胁 三:常见的攻击类型 1.端口扫描 2.DoS和DDoS攻击 3.特洛依木马(Trojan) 3.1 木马的工作原理 3.2 特洛伊木马具有的特性 3.3 木马的种类 3.4 被…

JVM垃圾收集器合集

前言:JVM GC收集器的回顾与比较 JVM(Java虚拟机)中的垃圾收集器是自动管理内存的重要机制,旨在回收不再使用的对象所占用的内存空间。以下是JVM中几种常见的垃圾收集器的详细介绍: 一、新生代垃圾收集器 1.Serial收集…

Vue3中Vue.prototype.$project = base.getProjectName()的语法如何使用?

在 Vue 3 中,Vue.prototype 已被移除,不能再直接向 Vue 的原型上添加全局属性或方法。取而代之的方式是使用 app.config.globalProperties 进行全局属性的挂载。 替代方式 如果你想在 Vue 3 中实现类似 Vue.prototype.$project base.getProjectName() …

刷leetcode hot100--动态规划3.12

第一题乘积max子数组[1h] emmmm感觉看不懂题解 线性dp【计划学一下acwing,挨个做一下】 线性动态规划 相似题解析 最长上升子序列 最大上升子序列和 最大连续子段和 乘积最大子数组_哔哩哔哩_bilibili 比较奇怪的就是有正负数和0,如何处理&#xff1f…

更新vscode ,将c++11更新到c++20

要在CentOS系统中安装最新版本的GCC,你可以使用SCL(Software Collections)仓库,它提供了开发工具的最新版本。以下是安装步骤: 1、 添加SCL仓库: 首先,添加CentOS的SCL仓库,该仓库…