Pytest自动化脚本中各个层级的setup和teardown的执行流程和使用方法

Python Pytest中setup和teardown使用详解 在Python的自动化测试中,Pytest是一个非常流行且功能强大的测试框架。为了提高测试的效率和组织性,Pytest提供了setup和teardown功能,用于在测试执行前进行准备工作,以及在测试执行后进行清理工作。本文将详细介绍Pytest中setup和teardown的作用域及其使用方法,并提供相应的示例代码。 阅读详情

【原文链接】Pytest自动化脚本中各个层级的setup和teardown的执行流程和使用方法

一、自动化脚本组成简介

一般来说,自动化脚本是由若干个测试套组成的,而每个测试套又由测试套setup,若干个脚本,测试套teardown组成的。每个脚本又是由测试脚本级setup,测试脚本正文、测试脚本级teardown组成,具体结构如下所示。

测试套1
  |--------测试套层级的setup
  |--------测试脚本1
              |--------测试脚本层级的setup
			  |--------测试脚本1正文
			  |--------测试脚本层级的teardown
  |--------测试脚本2
              |--------测试脚本层级的setup
			  |--------测试脚本2正文
			  |--------测试脚本层级的teardown
  |--------测试套层级的teardown
测试套2
  |--------测试套层级的setup
  |--------测试脚本3
              |--------测试脚本层级的setup
			  |--------测试脚本3正文
			  |--------测试脚本层级的teardown
  |--------测试脚本4
              |--------测试脚本层级的setup
			  |--------测试脚本4正文
			  |--------测试脚本层级的teardown
  |--------测试套层级的teardown

在pytest自动化测试框架中,测试套可以是一个类,也可以是一个文件,测试脚本可以是类中的一个测试函数,也可以是文件中的一个测试函数,下面就将pytest中的测试函数、测试类、以及各个层级的setup和teardown详细展开讲解。

二、测试类中的各个层级的setup和teardown

在pytest中如果使用类组织测试脚本,则一个类相当于是一个测试套,测试套就有测试套级别的setup和teardown,如下代码,类级别的setup和teardown的名字分别为setup_class和teardown_class,因为类中的函数准确的说应该叫方法,因此类中的测试脚本级的setup和teardown的的名字分别为setup_method和teardown_method。如下代码中有两个测试函数test_01和test_02,因此从理论上分析如下代码的执行顺序应该是首先执行测试套级的setup,即setup_class,然后执行第一个脚本,即setup_method,test_01,teardown_method,接下来执行第二个脚本,即setup_method,test_02,teardown_method,最后执行测试套级的teardown,即teardown_class

class TestDemo:
    def setup_class(self):
        print("in setup_class")

    def teardown_class(self):
        print("in testdown_class")

    def setup_method(self):
        print("in setup_method")

    def teardown_method(self):
        print("in teardown_method")

    def test_01(self):
        print("in test_01")
        assert 1==1

    def test_02(self):
        print("in test_02")

使用pytest -s命令执行,结果如下,通过打印的信息可以看出执行顺序与前面理论分析的顺序是一致的。

pytest -s
========================================================================= test session starts ==========================================================================
platform win32 -- Python 3.9.13, pytest-7.1.2, pluggy-1.0.0
rootdir: D:\redrose2100-book\ebooks\Pytest企业级应用实战\src
collected 2 items

test_demo.py in setup_class
in setup_method
in test_01
.in teardown_method
in setup_method
in test_02
.in teardown_method
in testdown_class


========================================================================== 2 passed in 2.14s ===========================================================================

三、测试文件中各个层级的setup和teardown

测试文件又叫测试模块,即module,在pytest框架中,一个测试文件同样也可以作为一个测试套来组织管理测试脚本,如下代码中即为一个测试文件组织管理了两个测试脚本test_03和test_04,既然是测试套就同样有测试套层级setup和teardown的概念,在这里测试套层级的setup和teardown的名字为setup_module和teardown_module,在python文件中的函数即叫做函数,所以测试模块中测试脚本层级的setup和teardown的名字为setup_function和teardown_function,如下,那么这里从理论上分析执行的顺序应该是首先执行测试套的setup,即setup_module,然后执行第一个测试脚本,即setup_function,test_03,teardown_function,然后执行第二个脚本,即setup_function,test_04,teardown_function,最后执行测试套级别的teardown,即teardown_module。

def setup_module():
    print("in setup_module")

def teardown_module():
    print("in teardown_module")

def setup_function():
    print("in setup_function")

def teardown_function():
    print("in teardown_function")

def test_03():
    print("in test_03")
    assert 1==1

def test_04():
    print("in test_04")
    assert 1==1

使用pytest -s命令执行,结果如下,通过打印的顺序可以看出这里的执行顺序与前面的理论分析的顺序是完全一致的。

pytest -s
========================================================================= test session starts ==========================================================================
platform win32 -- Python 3.9.13, pytest-7.1.2, pluggy-1.0.0 
rootdir: D:\redrose2100-book\ebooks\Pytest企业级应用实战\src
collected 2 items

test_demo.py in setup_module
in setup_function
in test_03
.in teardown_function
in setup_function
in test_04
.in teardown_function
in teardown_module


========================================================================== 2 passed in 2.07s ===========================================================================

四、测试文件中测试函数和类中测试方法混合时各个层级的setup与teardown

当测试文件中测试函数和类中的测试方法混合时,如下测试脚本,看上去执行顺序非常复杂,其实这里面可以把测试类TestDemo看做与test_03和test_04同一级别的来分析,这样就很容分析出执行的顺序了,即首先执行测试模块级的setup,即setup_module,然后执行第一个脚本,这里第一个可以理解为TestDemo这个测试了,此时就可以按照测试类的执行原理将TestDemo中的代码执行完成,然后执行第二个脚本,即setup_function,test_03,teardown_function,接下来执行第三个脚本,即setup_function,test_04,teardown_function,最后执行测试模块级的teardown,即teardown_module。

class TestDemo:
    def setup_class(self):
        print("in setup_class")

    def teardown_class(self):
        print("in testdown_class")

    def setup_method(self):
        print("in setup_method")

    def teardown_method(self):
        print("in teardown_method")

    def test_01(self):
        print("in test_01")
        assert 1==1

    def test_02(self):
        print("in test_02")

def setup_module():
    print("in setup_module")

def teardown_module():
    print("in teardown_module")

def setup_function():
    print("in setup_function")

def teardown_function():
    print("in teardown_function")

def test_03():
    print("in test_03")
    assert 1==1

def test_04():
    print("in test_04")
    assert 1==1

使用pytest -s命令执行,结果如下,通过打印内容可以看出执行顺序与前面的理论分析的顺序是一致的。

pytest -s
========================================================================= test session starts ==========================================================================
platform win32 -- Python 3.9.13, pytest-7.1.2, pluggy-1.0.0
rootdir: D:\redrose2100-book\ebooks\Pytest企业级应用实战\src
collected 4 items                                                                                                                                                        

test_demo.py in setup_module
in setup_class
in setup_method
in test_01
.in teardown_method
in setup_method
in test_02
.in teardown_method
in testdown_class
in setup_function
in test_03
.in teardown_function
in setup_function
in test_04
.in teardown_function
in teardown_module


========================================================================== 4 passed in 0.02s =========================================================================== 

五、各个层级的setup和teardown在自动化实践中的应用。

通过前面对各个层级的setup和teardown的执行顺序的分析,可以看出,测试套层级的setup主要用于测试套中所有的测试脚本公共的而且只需要配置一次的配置,而测试套层级的teardown则用于当测试套内的所有用例执行完成后,恢复环境或者清理配置的作用。比如当一个测试套中的所有用例都需要某个用户登录之后才能才做,此时就可以将登录操作在测试套级别的setup中实现,而退出登录操作则可在测试套级别的teardown中实现。而对于测试套中的每个用例,比如当用户登录后,在每个用例中都希望首先将页面切换到首页,然后再进行相关的操作,此时就可以将切换到首页的动作在测试脚本级的setup中实现,即只需要实现一次,当前测试套中的每个用例执行之前都会首先执行脚本级setup操作,即切换到首页,这样一来就减少了测试脚本的代码重复率同时也提高了脚本的运行效率。
当然在自动化实践中,需要提前给测试人员传达这种思想,目的是让测试在设计用例的时候就要把用例按照测试套的维度去划分。

『德不孤』Pytest框架 — 9、Pytest框架的setUp()和tearDown()函数 文章目录1、setUp()和tearDown()函数介绍2、setUp()和tearDown()函数作用3、Pytest框架的setUp()和tearDown()4、示例(1)方法级(2)类级(3)函数级(4)模块级 1、setUp()和tearDown()函数介绍 之前学过Unittest测试框架,知道前置setup()函数和后置teardown()函数非常好用,在每次用例开始前和结束后都去执行一次。 当然还有更高级一点的setupClass()函数和teardownClass()函数,需配合classm 阅读详情

相关推荐

九、Pytest框架 — Pytest框架的setUp()和tearDown()函数

###文章内容有配套的学习视频和笔记都放在了文章末尾### 1、setUp()和tearDown()函数介绍 之前学过Unittest测试框架,知道前置setup()函数和后置teardown()函数非常好用,在每次用例开始前和结束后都去执行一次。 当然还有更高级一点的setupClass()函数和teardownClass()函数,需配合classmethod装饰器一起使用,在做Selenium自动化的时候,它的效率尤为突出,可以只启动一次浏览器执行多个用例。 2、setUp()和tearDown(

测试-八戒 1696

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

作为一名Python开发人员,您一定知道Pytest是一个广泛使用的Python测试框架。它具有易用性和灵活性,可以帮助您快速编写测试用例,并且能够支持包括单元测试、集成测试、功能测试等多种测试类型。而其中,setup和teardown函数是Pytest提供的两个非常重要的特性。 setup和teardown函数可以分别在每个测试用例之前和之后执行,以确保测试环境的准备和清除工作。通过合理使用这两个函数,您可以有效地提高测试效率,并且避免测试用例之间的相互干扰。本篇文章将详细介绍setup和teardow

m0_70618214的博客 2739

pytest学习和使用4-pytest和Unittest中setup、teardown等方法详解和使用(最全)

本文作者: 小菠萝测试笔记 本文链接: https://www.cnblogs.com/poloyy/p/15236135.html 关于博主: 阿里高级测开工程师 - 让我装回杯 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处! 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。 ...

虫无涯的博客 707

自动化测试框架Pytest介绍(4)——前置和后置之setup和teardown

pytest的前置和后置,setup和teardown,测试用例级别、测试类级别、模块级别

wanglx1984的博客 1409

vscode远程连接deepin出错:过程试图写入的管道不存在的解决方法

背景:昨天我用vscode使用ssh远程开发还处于正常状态,今天刚打开电脑,并启动deepin,再次使用vscode重新连接就出现异常。意思就是22号默认端口连接被拒绝,所以要先确定ssh是否连接。3.重新进入vscode里面,重新连接,如图成功连接。,查看port后面的端口号是不是22号。1.检查sshd是否启动。

qq_43573047的博客 2940

Qt 6.5实战:用QMediaPlayer搞定RTSP监控流播放(附LAV Filters解码器避坑指南)

本文详细介绍了如何在Qt 6.5中使用QMediaPlayer实现低延迟RTSP监控流播放,并提供了LAV Filters解码器的配置避坑指南。通过优化缓冲策略和硬件加速设置,显著提升视频流的播放性能和稳定性,适用于工业视觉检测和安防监控等实时场景。

weixin_33712987的博客 391

【pytest】概述pytest——setup、teardown方法和conftest中的fixture用法,来执行测试用例的前置/后置条件语句操作

概述pytest——setup、teardown方法和conftest中的fixture用法,来执行测试用例的前置/后置条件语句操作

好学的小师弟的博客;华为云社区月度积极博主 1万+

2.1 跟网型控制原理与局限性

本文深入分析了并网变流器的跟网型(GFL)控制技术及其局限性。GFL控制将变流器视为受控电流源,依赖锁相环(PLL)跟踪电网电压,在强电网下表现良好,但在弱电网中面临严峻挑战。研究发现,当电网短路比降低时,PLL动态与电网阻抗的负交互会导致系统失稳,同时GFL变流器缺乏电压支撑能力和惯量响应能力,在故障时易脱网。相比之下,构网型(GFM)控制具有电压源特性,能自主构建电网电压,更适合弱电网环境。随着新能源占比提高,GFL控制正逐渐被更具主动支撑能力的GFM控制所替代。

技术工作者 985

Pytest框架 —— setUp()和tearDown()函数

1、setUp()和tearDown()函数介绍,之前学过Unittest测试框架,知道前置setup()函数和后置teardown()函数非常好用,在每次用例开始前和结束后都去执行一次。当然还有更高级一点的setupClass()函数和teardownClass()函数,需配合classmethod装器一起使用,在做Selenium自动化的时候,它的效率尤为突出,可以只启动一次浏览器执行多个用例。 2、setUp()和tearDown()函数作用

myh919的博客 7096

【ros2】ros2_control 全面解析与实战指南

ros2_control 是 ROS2 生态中用于机器人实时控制的核心框架,旨在统一硬件接入接口、复用控制算法,避免重复开发,实现仿真与实机硬件的无缝迁移。其核心目标是简化不同硬件(传感器、执行器、完整系统)的集成流程,让开发者专注于控制逻辑而非硬件适配。创建类型功能包,依赖rclcpp。实现on_initupdate在中声明控制器插件,编译生成动态库。在 YAML 配置文件中指定自定义控制器类型,加载测试。

EnHengNa的博客 1461

10、基于单倍型多样性隐马尔可夫模型的基因型错误检测

本文提出了一种基于单倍型多样性隐马尔可夫模型(HMM)的基因型错误检测方法,旨在提升三人组基因型数据中错误识别的准确性。通过利用群体水平的连锁信息,该方法克服了传统方法在小系谱数据中表现不佳的局限性。文章详细介绍了模型结构、三种替代似然函数及其计算方法,并通过模拟数据集和真实数据集验证了方法的有效性。实验结果显示,该方法在灵敏度、特异度和准确率方面均表现出色,为基因数据质量控制提供了新的解决方案。

moon9的博客 90

pytest框架中setup、teardown和setup_class、teardown_class

函数级别方法: setup:每个用例执行之前都会执行一次 teardown:每个用例执行之后都会执行一次 import pytest class TestFunc: def setup(self): # 每个测试函数运行前执行一次 print("---setup---") def test_a(self): print("test_a") def test_b(self): print("test_b"

weixin_43489242的博客 7982

点云焊缝提取

本文介绍了一个基于PCL库的点云处理流程,包含三个核心模块:MLS平滑处理通过多项式拟合修正点云位置;差异提取通过双向匹配定位源/目标点云的非重叠区域;统计过滤剔除离群噪声点。该流程采用"平滑-筛选-净化"的通用思路,将复杂算法封装为可配置接口,实现了工业级点云预处理。文章重点分析了各模块的原理、PCL接口调用及参数设计逻辑,同时指出参数调优、算法扩展等深入探索方向,展现了PCL在点云处理中的模块化优势与实用价值。

weixin_45196569的博客 240

pytest中前置setup和后置teardown的使用方法

前言 学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次。 当然还有更高级一点的setupClass和teardownClass,需配合@classmethod装饰器一起使用,在做selenium自动化的时候,它的效率尤为突出,可以只启动一次浏览器执行多个用例。 pytest框架也有类似于setup和teardown的语法,并且还不止这四个 用例运行级别 模块级(setup_module/teardown_module)开始于模块

公子清羽的博客 2390

RK3588适配Ubuntu系统

RKsdk上支持buildroot以及Debian系统,但是Ubuntu需要自己移植,有很多公司都移植好了可以直接用,这里就总结记录一下我制作Ubuntu的过程。

m0_60805802的博客 5352

2025美赛E题为农业留出空间(附代码+全保姆教程)Making Room for Agriculture

有机农业的核心在于减少化学投入,促进自然控制和可持续性。变量定义CCC: 作物种群III: 害虫种群PPP: 天然捕食者种群(蝙蝠、鸟类等)BBB: 生物多样性水平(以种类数量表示)SSS: 土壤健康指数(影响植物繁殖与作物生长)EEE: 农业生态系统的整体稳定性。

博客 1479

Pytest测试用例之setup与teardown方法(一)

续 日常积累 | 初识Pytest| 日常积累 | 初识pytest (二)继续分享,今天讲讲在编写完基本用例后,有些通用业务流代码或一些共用代码如何使用前置后置方法直接调用学过...

2481

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Pytest测试用例之setup与teardown方法(二)

续 日常积累 | 初识Pytest| 日常积累 | 初识pytest (二)| Pytest测试用例之setup与teardown方法(一)继续分享,今天继模块级以及函数式set...

7233

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)

目录:导读一、前言二、用例运行级别三、函数式1、setup_function / teardown_function2、setup_module / teardown_module四、类和方法五、函数和类混合 一、前言 学过 unittest 的都知道里面用前置和后置 setup 和 teardown 非常好用,在每次用例开始前和结束后都去执行一次 当然还有更高级一点的 setupClass 和 teardownClass,需配合 @classmethod 装饰器一起使用,在做 selenium 自动化的时

760

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【自动化测试】Pytest的必会技巧 —— pytest setup和teardown

pytest setup和teardown,我们在使用selenium执行web自动化测试的时候,当我们需要执行多条测试用例时,执行一条用例就启动一次浏览器显然效率就太低了,我们需要一次启动浏览器,执行多条用例。pytest可以满足我们的需求吗?答案是pytest的setup和teardown完美匹配我们的需求,unittest有的它有,unittest没有的它也有!

HSS919的博客 646

(3)pytest的setup/teardown

学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次。当然还有更高级一点的setupClass和teardownClass,需配合@classmethod装饰器一起使用,在做selenium自动化的时候,它的效率尤为突出,可以只启动一次浏览器执行多个用例。pytest框架也有类似于setup和teardown的语法,并且还不止这四个。

专注于技术分享的博主 751

pytest——03 setup和teardown

目录 前言 用例运行级别 函数式 setup_function/teardown_function setup_module/teardown_module 类和方法 函数和类混合 前言 学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次。 当然还有更高级一点的setupClass和teardownClass,需配合@classmethod装饰器一起使用,在做selenium自动化的时候,它的效率尤为突出,可以只启动.

zangba9624的博客 382

【pytest】三、pytest的前后置(固件、夹具):setup和teardown,及封装

1)setup的作用:用来实现执行用例前的一些操作(如:数据准备、打开APP/浏览器等操作); 2)teardown的作用:用来实现执行用例后的一些操作(如:数据清理、关闭APP/浏览器等操作)。 二、分类: 函数级:setup_function/teardown_function 在每个函数形式的用例前/后,都会执行的代码 方法级:setup_method/teardown_method 在类中方法形式的用例前/后,都会执行的代码 类级:setup_class/teardown_clas

Moonlight的博客 2656

深入理解Pytest中的Setup和Teardown

关注开源优测不迷路大数据测试过程、策略及挑战测试框架原理,构建成功的基石在自动化测试工作之前,你应该知道的10条建议在自动化测试中,重要的不是工具对于简单程序而言,使用 Pytest 运行测试直截了当。然而,当你的程序依赖诸如数据库初始化、外部网络调用或复杂对象等预设任务时,情况就变得有点棘手了。虽然这些任务本身并不复杂,但在测试中处理它们可能就不那么直观了。那么,在测试过程中你该如何应对这一挑战...

开源优测 842
上一篇: Python----如何处理csv文件即csv模块的用法
下一篇: Pytest----Pytest自动化测试框架中文本测试的使用方法
redrose2100
博客等级 码龄10年 8万+粉丝 874原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值