Pytest测试框架中,setup和teardown函数的作用及使用方法

news/2024/4/19 14:37:02/

作为一名Python开发人员,您一定知道Pytest是一个广泛使用的Python测试框架。

它具有易用性和灵活性,可以帮助您快速编写测试用例,并且能够支持包括单元测试、集成测试、功能测试等多种测试类型。而其中,setup和teardown函数是Pytest提供的两个非常重要的特性。

setup和teardown函数可以分别在每个测试用例之前和之后执行,以确保测试环境的准备和清除工作。通过合理使用这两个函数,您可以有效地提高测试效率,并且避免测试用例之间的相互干扰。

本篇文章将详细介绍setup和teardown函数的作用及使用方法,让您轻松掌握这两个关键特性,为您的测试工作注入动力!

Pytest - setup 和 teardown

  • 执行用例肯定有些需要前置条件或后置操作,例如前置的用户登陆,后置的清理数据等操作;

  • 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

test_py.py

import pytest
def setup_module():
print("\n!!!! setup_module > 整个.py模块开始前只执行一次:打开浏览器/获取cookie !!!!")
def teardown_module():
print("!!!! teardown_module > 整个.py模块结束后只执行一次:关闭浏览器 !!!!")
def setup_function():
print("\n### setup_function > 每个函数级别用例开始前都执行 ###")
def teardown_function():
print("### teardown_function > 每个函数级别用例结束后都执行 ###")
def test_one():
print("test case 1")
def test_two():
print("test case 2")
class TestCase():
def setup_class(self):
print("\n^^^ setup_class > 整个测试类开始前只执行一次 ^^^")
def teardown_class(self):
print("^^^ teardown_class > 整个测试类结束后只执行一次 ^^^")
def setup_method(self):
print("\n=== setup_method > 类里面每个用例执行前都会执行 ===")
def teardown_method(self):
print("=== teardown_method > 类里面每个用例结束后都会执行 ===")
def setup(self):
print("--- setup > 类里面每个用例执行前都会执行 ---")
def teardown(self):
print("--- teardown > 类里面每个用例结束后都会执行 ---")
def test_three(self):
print("test case 3")
def test_four(self):
print("test case 4")
if __name__ == '__main__':
pytest.main(["-q", "-s", "-ra", "test_py.py"])

  • 执行结果如图所示各级别(讲解顺序从上往下,级别从低到高):

    • 黄色框:用例级别 【setup、teardown】

    • 橙色框:方法级别【setup_method、teardown_method】

    • 蓝色框:类级别【setup_class、teardown_class】

    • 绿色框:函数级别【setup_function、teardown_function】

    • 红色框:模块级别【setup_module、teardown_module】

结语

这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!


补充:

如果有需要软件测试跟教学视频的小伙伴,记得关注我私❤【资料】


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

相关文章

RK3568 AP6275S蓝牙驱动程序调度过程

1、前言 今年3月份调度了RK3568驱动程序&#xff0c;当时由于时间的问题&#xff0c;AP6275S蓝牙驱动程序没有调试成功。当时仔细检查的设备树的配置。 wireless_bluetooth: wireless-bluetooth {compatible "bluetooth-platdata";clocks <&rk809 1>;cl…

Java 的多线程浅析

前言 Java 的多线程在当今业界已经成为了一个非常重要的技能。无论您是新手还是经验丰富的程序员&#xff0c;精通 Java 的多线程编程都是至关重要的。因为多线程可以帮助您实现更快的应用程序、更高效的性能以及更出色的用户体验。在这篇文章中&#xff0c;我们将介绍有关 Ja…

java学习 spring mybatis maven juc并发 缓存

Spring系列第11篇&#xff1a;bean中的autowire-candidate又是干什么的&#xff1f;_路人甲Java的博客-CSDN博客 Spring系列 Spring系列第1篇&#xff1a;为何要学spring&#xff1f; Spring系列第2篇&#xff1a;控制反转&#xff08;IoC&#xff09;与依赖注入&#xff08;DI…

Swin Transformer: 论文十问回答

论文&#xff1a;Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. 链接&#xff1a; 文章目录 Q1:论文试图解决什么问题&#xff1f;Q2:这是否是一个新的问题&#xff1f;Q3&#xff1a;这篇文章要验证一个什么科学假设&#xff1f;Q4&#xff1a;有…

【LeetCode 142】环形链表II

思路&#xff1a; 本题需要考虑以下两个问题&#xff1a; 判断链表是否环 如果有环&#xff0c;如何找到这个环的入口 一开始想着使用双指针的办法实现&#xff0c;但是发现没有什么思路&#xff0c;后面看了一些解析&#xff0c;用的快慢指针&#xff0c;两个指针重逢了&a…

【数据结构】第五周

目录 进制转换问题 字符串镜像 表达式求值 队列元素逆置 杨辉三角形​​​​​​​ 进制转换问题 【问题描述】根据课堂讲授&#xff0c;请用“顺序栈”解决进制转换问题&#xff0c;不采用顺序栈&#xff0c;不给分。 【输入形式】十进制数据和待转换的进制 【输出形式】…

【发电机、输变电JDL-5400A 电流继电器 报警信号切除故障JOSEF约瑟】

名称&#xff1a;电流继电器&#xff1b;品牌&#xff1a;JOSEF约瑟&#xff1b;型号&#xff1a;JDL-5400A&#xff1b;触点容量&#xff1a;250V2A&#xff1b;返回时间&#xff1a;≤35ms&#xff1b;整定范围&#xff1a;0.03-19.9A&#xff1b;特点&#xff1a;返回系数高…

element Table实现翻页多选和多选数据双向绑定

参考资料&#xff1a;el-table、element Table使用toggleRowSelection添加默认值不生效的原因与解决方法 说明&#xff1a; el-table设置row-key用于翻页绑定el-table toggleRowSelection方法用于切换选中项状态 <template><el-table:data"tableData"styl…

vue2实例初始化流程

一、静态成员初始化 initGlobalApi 1.通过 Object.defineProperty(Vue, config, configDef) 初始化了Vue.config这个静态属性 2.定义了Vue.util&#xff0c;并挂载了一部分API&#xff08;warn/extend/mergeOptions/defineReactive&#xff09; 3.定义三个静态方法&#xf…

macos中卸载 vscode

需求 macos中卸载 vscode 环境&#xff1a; macOS: 13.0.1 viscose: Version: 1.78.2 (Universal) 步骤 退出 VSCode 应用 . 输入如下指令&#xff0c;删除 VSCode 的设置和配置 sudo rm -rf $HOME/Library/Application\ Support/Code输入如下指令&#xff0c;删除 VSC…

箭头函数简介

目的&#xff1a;引入箭头函数是更简短的函数写法并且不绑定this,箭头函数的语法比函数表达式更简洁 一、基本语法&#xff1a; const fn () > {console.log(我是箭头函数) } fn()const fn (x) > {console.log(x)}fn(1)//1.只有1个形参,可省略小括号&#xff0c;其他…

vector常见接口的使用(基于c++标准库中的STL)

前言 vector是STL中的重要容器&#xff0c;在平时使用中较常见。学会使用它以及了解它的核心原理对于我们学习它是很有帮助的。vector是可以动态增长的数组。vector可以像数组一样进行随机访问&#xff0c;这是vector最大的优势之一&#xff0c;因为支持随机访问就间接的支持了…

从外包到转岗华为正式员工月薪17K,这一百多天的心酸谁能懂.....

本人毕业于某普通二本院校非计算机专业&#xff0c;跨专业入行测试&#xff0c;至今有近 5年工作经验。 第一份测试工作是在华为做了两年外包。总体感受就是 这份工作缺乏归属感&#xff0c;心里总有一种落差&#xff0c;进步空间不大&#xff0c; 接触不到核心技术&#xf…

Spring注解开发——bean的作用范围与生命周期管理

文章目录 1.bean管理1.1 bean作用范围Scope注解 1.2 bean生命周期PostConstructPreDestroy 2.小结 1.bean管理 1.1 bean作用范围 Scope注解 不写或者添加Scope(“singleton”)表示的是单例 如何配置多例&#xff1f; 在Scope(“prototype”)表示的是多例 1.2 bean生命周…

《微服务实战》 第二十七章 CAS

前言 本章节介绍CAS 1、CAS的概念 CAS的全称为&#xff1a;CompareAndSwap,直译为对比和交换。 CAS实际是普遍处理器都支持的一条指令&#xff0c;这条指令通过判断当前内存值V、旧的预期值A、即将更新的值B是否相等来对比并设置新值&#xff0c;从而实现变量的原子性。 Syn…

NSFW 图片分类

NSFW指的是 不适宜工作场所&#xff08;“Not Safe (or Suitable) For Work;”&#xff09;。在本文中&#xff0c;将介绍如何创建一个检测NSFW图像的图像分类模型。 数据集 由于数据集的性质&#xff0c;我们无法从一些数据集的网站(如Kaggle等)获得所有图像。 但是我们找到…

pdf怎么在线阅读?一键查阅并不难

PDF格式的文件已经成为现代生活中不可或缺的一部分&#xff0c;无论是学术论文、电子书、工作文件还是表格&#xff0c;都有可能以PDF格式出现。然而&#xff0c;为了读取这些文件&#xff0c;我们需要安装PDF阅读器&#xff0c;这在某些情况下可能会带来不便。因此&#xff0c…

通过Python的fitz库提取pdf中的图片

文章目录 前言一、fitz库是什么&#xff1f;二、安装fitz库三、查看fitz库版本四、pymupdf库是什么&#xff1f;五、安装pymupdf库六、查看pymupdf库版本七、fitz和pymupdf是什么关系&#xff1f;八、提取pdf中的图片1.引入库2.定义pdf路径3.打开PDF文件4.遍历所有页面5.获取页…

定薪17K*15,阿里测开岗上岸面经分享....

先简单介绍一下我自己吧&#xff0c;等会大家以为我是什么学历狂人&#xff0c;技术大牛&#xff0c;我毕业于广东一个普通本科院校&#xff0c;绝对不是什么双一流大学&#xff0c;大家不要有距离感&#xff0c;这也是我为什么来分享的原因&#xff0c;因为我觉得我这段经验还…

基于OpenCV [c++]——形态学操作(分析和应用)

摘要&#xff1a; 形态学一般指生物学中研究动物和植物结构的一个分支。用数学形态学&#xff08;也称图像代数&#xff09;表示以形态为基础对图像进行分析的数学工具。 基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。 形…