pytest教程-7-用例前后置方法

上一小节,我们学习了pytest跳过测试用例的方法,本小节我们讲解一下pytest用例的前后置方法。

在unittest中就有前置setup和后置teardown来处理测试用例执行前的准备工作(浏览器驱动实例化,数据库连接等)以及执行后的处理工作(清理数据,关闭浏览器驱动,关闭数据库连接等),那么pytest同样也提供了前置后置的方法来满足这个需求。

pytest提供了以下5个前置后置方法:

  • setup_module、teardown_module(模块级别):整个py文件,测试用例执行前后只执行一次
  • setup_class、teardown_class:(类级别):整个测试类中,测试用例执行前后只执行一次
  • setup、teardown(函数级别):每条用例执行前后都会执行一次,既可以作用于类中测试函数,也可以作用于类外测试函数
  • setup_method、teardown_method(方法级别):每条用例执行前后都会执行一次,只作用于类中测试函数
  • setup_function、teardown_function(函数级别):每条用例执行前后都会执行一次,只作用于类外测试函数使用

1、setup_module、teardown_module(模块级别)示例

#test_demo.py

import pytest


class Test_04:
    def test_01(self):
        print('用例01执行')

    def test_02(self):
        print('用例02执行')


def test_03():
    print('类外用例03执行')


def setup_module():
    print('\n我是setup_module前置执行\n')


def teardown_module():
    print('\n我是teardown_module后置执行')


def test_04():
    print('类外用例04执行')


if __name__ == '__main__':
    pytest.main()

运行结果如下:整个py文件,测试用例执行前后只执行了一次

Launching pytest with arguments D:\PycharmProjects\Source_Code\pytest_demo\test_demo.py --no-header --no-summary -q in D:\PycharmProjects\Source_Code\pytest_demo

============================= test session starts =============================
collecting ... collected 4 items

test_demo.py::Test_04::test_01 
我是setup_module前置执行

PASSED                                    [ 25%]用例01执行

test_demo.py::Test_04::test_02 PASSED                                    [ 50%]用例02执行

test_demo.py::test_03 PASSED                                             [ 75%]类外用例03执行

test_demo.py::test_04 PASSED                                             [100%]类外用例04执行

我是teardown_module后置执行


============================== 4 passed in 0.03s ==============================

2、setup_class、teardown_class:(类级别)示例

import pytest


class Test_04:
    def test_01(self):
        print('用例01执行')

    def setup_class(self):
        print('\n我是setup_class前置执行\n')

    def teardown_class(self):
        print('\n我是teardown_class后置执行')

    def test_02(self):
        print('用例02执行')


def test_03():
    print('类外用例03执行')


def test_04():
    print('类外用例04执行')


if __name__ == '__main__':
    pytest.main()

运行结果如下:整个测试类中,测试用例执行前后只执行了一次

============================= test session starts =============================
collecting ... collected 4 items

test_demo.py::Test_04::test_01 
我是setup_class前置执行

PASSED                                    [ 25%]用例01执行

test_demo.py::Test_04::test_02 PASSED                                    [ 50%]用例02执行

我是teardown_class后置执行

test_demo.py::test_03 PASSED                                             [ 75%]类外用例03执行

test_demo.py::test_04 PASSED                                             [100%]类外用例04执行


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

3.1、setup、teardown(函数级别) 作用于类中测试函数 示例

import pytest


class Test_04:
    def setup(self):
        print('\nsetup前置执行\n')

    def teardown(self):
        print('\nteardown后置执行\n')

    def test_01(self):
        print('用例01执行')

    def test_02(self):
        print('用例02执行')


if __name__ == '__main__':
    pytest.main()

运行结果如下:每条用例执行前后都会执行一次,既可以作用于类中测试函数

============================= test session starts =============================
collecting ... collected 2 items

test_demo.py::Test_04::test_01 
setup前置执行

PASSED                                    [ 50%]用例01执行

teardown后置执行


test_demo.py::Test_04::test_02 
setup前置执行

PASSED                                    [100%]用例02执行

teardown后置执行



======================== 2 passed, 4 warnings in 0.03s ========================

3.2、setup、teardown(函数级别) 作用于类外测试函数 示例

import pytest


def setup():
    print('\n类外setup前置执行\n')


def teardown():
    print('\n类外teardown后置执行\n')


def test_03():
    print('类外用例03执行')


def test_04():
    print('类外用例04执行')


if __name__ == '__main__':
    pytest.main()

运行结果如下:每条用例执行前后都会执行一次,也可以作用于类外测试函数


test_demo.py::test_03 
类外setup前置执行

PASSED                                             [ 50%]类外用例03执行

类外teardown后置执行


test_demo.py::test_04 
类外setup前置执行

PASSED                                             [100%]类外用例04执行

类外teardown后置执行



============================== 2 passed in 0.03s ==============================

4、setup_method、teardown_method(方法级别)示例

import pytest


class Test_04:
    def setup_method(self):
        print('\nsetup_method前置执行\n')

    def teardown_method(self):
        print('\nteardown_method后置执行\n')

    def test_01(self):
        print('用例01执行')

    def test_02(self):
        print('用例02执行')


if __name__ == '__main__':
    pytest.main()

运行结果如下:每条用例执行前后都会执行一次,只作用于类中测试函数

============================= test session starts =============================
collecting ... collected 2 items

test_demo.py::Test_04::test_01 
setup_method前置执行

PASSED                                    [ 50%]用例01执行

teardown_method后置执行


test_demo.py::Test_04::test_02 
setup_method前置执行

PASSED                                    [100%]用例02执行

teardown_method后置执行



============================== 2 passed in 0.02s ==============================

5、setup_function、teardown_function(函数级别)示例

import pytest

class Test_04:
    def test_01(self):
        print('用例01执行')
    def test_02(self):
        print('用例02执行')

def setup_function():
    print('\nsetup_function前置执行\n')
def teardown_function():
    print('\nteardown_function后置执行\n')

def test_03():
    print('类外用例03执行')
def test_04():
    print('类外用例04执行')

if __name__ == '__main__':
    pytest.main()

运行结果如下:每条用例执行前后都会执行一次,只作用于类外测试函数使用

============================= test session starts =============================
collecting ... collected 4 items

test_demo.py::Test_04::test_01 PASSED                                    [ 25%]用例01执行

test_demo.py::Test_04::test_02 PASSED                                    [ 50%]用例02执行

test_demo.py::test_03 
setup_function前置执行

PASSED                                             [ 75%]类外用例03执行

teardown_function后置执行


test_demo.py::test_04 
setup_function前置执行

PASSED                                             [100%]类外用例04执行

teardown_function后置执行



============================== 4 passed in 0.03s ==============================

前、后置执行顺序

1、测试类中前、后置执行顺序 示例

import pytest

class Test_04:
    def setup(self):
        print('setup前置执行')
    def teardown(self):
        print('teardown后置执行')
    def setup_class(self):
        print('\nsetup_class前置执行\n')
    def teardown_class(self):
        print('\nteardown_class后置执行\n')
    def setup_method(self):
        print('setup_method前置执行')
    def teardown_method(self):
        print('teardown_method后置执行')

    def test_01(self):
        print('用例01执行')
    def test_02(self):
        print('用例02执行')


if __name__ == '__main__':
    pytest.main()

运行结果如下:前置执行顺序:setup_class > setup_method > setup (后置执行顺序则相反)

============================= test session starts =============================
collecting ... collected 2 items

test_demo.py::Test_04::test_01 
setup_class前置执行

setup_method前置执行
PASSED                                    [ 50%]用例01执行
teardown_method后置执行

test_demo.py::Test_04::test_02 setup_method前置执行
PASSED                                    [100%]用例02执行
teardown_method后置执行

teardown_class后置执行



============================== 2 passed in 0.02s ==============================

2、测试类外前、后置执行顺序 示例

import pytest


def setup():
    print('类外setup前置执行')


def teardown():
    print('类外teardown后置执行')


def setup_function():
    print('\nsetup_function前置执行\n')


def teardown_function():
    print('\nteardown_function后置执行\n')


def setup_module():
    print('\nsetup_module前置执行\n')


def teardown_module():
    print('teardown_module后置执行')


def test_03():
    print('类外用例03执行')


def test_04():
    print('类外用例04执行')


if __name__ == '__main__':
    pytest.main()

运行结果如下:前置执行顺序:setup_module > setup_function > setup (后置执行顺序则相反)
 

test_demo.py::test_03 
setup_module前置执行


setup_function前置执行

类外setup前置执行
PASSED                                             [ 50%]类外用例03执行
类外teardown后置执行

teardown_function后置执行


test_demo.py::test_04 
setup_function前置执行

类外setup前置执行
PASSED                                             [100%]类外用例04执行
类外teardown后置执行

teardown_function后置执行

teardown_module后置执行


============================== 2 passed in 0.02s ==============================

总结:

1、测试类中:setup_class、teardown_class

setup_method、teardown_method

测试类外:setup_function、teardown_function

setup_module、teardown_module

测试类中、类外均可:setup、teardown

2、执行顺序:

类中前置执行顺序:setup_class > setup_method > setup (后置执行顺序则相反)

类外前置执行顺序:setup_module > setup_function > setup (后置执行顺序则相反)


最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/353015.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常见の算法5

位图 一个int类型32字节,可以表示0-31这32个数出没出现过,出现过1没出现0,再扩大一点搞个数组,就可以表示0-1023出没出现过,一个long类型可储存64位 如何把10位组成的数,第四位由1改成零 package class05…

mcu短时间内发生多次中断,如何解决中断丢失问题?

问题 嵌入式开发中,如果中断A的处理函数执行时间长,某段时间内,快速来了2个中断A(例如:外部管脚输入信号变化),则会导致第2个中断丢失。 我有几个疑问: 1.目前市面上的芯片,是否支持缓存中断标志…

【docker】linux系统docker的安装及使用

一、docker应用的安装 1.1 安装方式 Docker的自动化安装,即使用提供的一键安装的脚本,进行安装。 官方的一键安装方式:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 国内 daocloud一键安装命令:curl -s…

JavaWeb:商品管理系统(Vue版)

文章目录 1、功能介绍2、技术栈3、环境准备3.1、数据库准备3.2、在新建web项目中导入依赖3.3、编写Mybatis文件3.4、编写pojo类3.5、编写Mybatis工具类3.6、导入前端素材(element-ui & vue.js & axios.js)3.7、前端页面 4、功能实现4.1、查询所有…

机器学习---无偏估计

1. 如何理解无偏估计 无偏估计:就是我认为所有样本出现的概率⼀样。 假如有N种样本我们认为所有样本出现概率都是 1/N。然后根据这个来计算数学期望。此时的数学期望就是我们平常讲 的平均值。数学期望本质就 是平均值。 2. 无偏估计为何叫做“无偏”&#xff1…

Deeplearning

Numpy Deep Learning Basic 神经网络: #mermaid-svg-2N27H7C0XPrmd8HP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2N27H7C0XPrmd8HP .error-icon{fill:#552222;}#mermaid-svg-2N27H7C0XPrmd8HP .…

GPIO的8种工作模式

一、8种工作模式 二、IO端口的基本结构 下面是一张F1的IO的结构图。 圆圈 2是芯片内部的上下拉电阻, 输入数据寄存器简称IDR ,cpu读IDR就可以知道外面的是高电平还是低电平,单片机IO口输出的高低电平主要依靠P-MOS和N-MOS,输出数据…

CHS_01.2.3.1+同步与互斥的基本概念

CHS_01.2.3.1同步与互斥的基本概念 知识总览什么是进程同步什么是进程互斥知识回顾 在这个小节中 我们会介绍进程同步和进程互斥相关的概念 知识总览 我们会结合一些具体的例子 让大家能够更形象的理解这两个概念 首先来看一下什么是进程同步 其实在聊进程同步之前 咱们已经接…

WPF自定义圆形百分比进度条

先看效果图 1.界面代码 <UserControl x:Class"LensAgingTest.CycleProcessBar1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.op…

STM32(更新中)

目录 1 时钟&#xff08;心跳&#xff09; 1.1 CubeMX基本配置 1.2 外设在时钟上的分配原理 1.3 时钟树 2 寄存器&#xff08;地址&#xff09; 3 GPIO 3.1 GPIO实物 3.2 GPIO两种结构&#xff08;推挽/开漏&#xff09; 3.3 LED 3.4 CUBEMX 3.5 常用函数 …

机器学习|ROC曲线和AUC值

概念AUC&#xff08;Area Under Curve&#xff09;被定义为ROC曲线下的面积。其中&#xff0c;ROC曲线全称为受试者工作特征曲线 &#xff08;receiver operating characteristic curve&#xff09;&#xff0c; 模型会计算出所判断事物为汉堡&#x1f354;的概率&#xff0c;而…

【游戏客户端开发的进阶路线】

*** 游戏客户端开发的进阶路线 春招的脚步越来越近&#xff0c;我们注意到越来越多的同学们都在积极学习游戏开发&#xff0c;希望能在这个充满活力的行业中大展拳脚。 当我们思考如何成为游戏开发领域的佼佼者时&#xff0c;关键在于如何有效规划学习路径。 &#x1f914; 我…

11.Elasticsearch应用(十一)

Elasticsearch应用&#xff08;十一&#xff09; 1.什么是自动补全 现代的搜索引擎&#xff0c;一般都会提供Suggest as you type的功能 帮助用户在输入搜索的过程中&#xff0c;进行自动补全或者纠错。通过协助用户输入更加精准的关键词&#xff0c;提高后续搜索阶段文档的…

看图说话:Git图谱解读

很多新加入公司的同学在使用Git各类客户端管理代码的过程中对于Git图谱解读不太理解&#xff0c;我们常用的Git客户端是SourceTree&#xff0c;配合P4Merge进行冲突解决基本可以满足日常工作大部分需要。不同的Git客户端工具对图谱展示会有些许差异&#xff0c;以下是SourceTre…

【教程】MobaXterm软件Keygen快速生成注册码

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 1、去官网安装正版软件&#xff0c;比如23.6版本的&#xff1a;MobaXterm free Xserver and tabbed SSH client for Windows 2、打开这个网站&#xff0c;输入信息&#xff1a;MobaXterm Keygen 3、将自动下载的C…

【原理图PCB专题】Allegro报封装Name is too long

在安装完成Cadence17.4版本后&#xff0c;在首次导入网表时发现PCB报了一些错误&#xff0c;就是名称太长 #1 ERROR(SPMHNI-189): Name is too long… ERROR(SPMHNI-189): Problems with the name of device ‘MT48LC2M32B2B5-6_SDRAMTSOP86_MT48LC2M32B2B5-6’: ‘Name is to…

vue-component组件

一、Component 组件 组件&#xff08;Component&#xff09;是自定义封装的功能。在前端开发过程中&#xff0c;经常出现多个网页的功能是重复的&#xff0c;而且很多不同的页面之间&#xff0c;也存在同样的功能。将相同的功能进行抽取,封装为组件,这样&#xff0c;前端人员就…

JavaWeb,Vue的学习(上)

概述 Vue的两个核心功能 声明式渲染&#xff1a;Vue 基于标准 HTML 拓展了一套模板语法&#xff0c;使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。响应性&#xff1a;Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM ViteVue3项目…

统计学-R语言-8.2

文章目录 前言双因子方差分析数学模型主效应分析交互效应分析正态性检验 绘制3个品种产量数据合并后的正态Q-Q图&#xff08;数据&#xff1a;example8_2&#xff09;练习 前言 本篇将继续介绍方差分析的知识。 双因子方差分析 考虑两个类别自变量对数值因变量影响的方差分析…

elasticsearch在ubuntu下的配置以及简单使用

参考资料 官方下载地址 ELK学习实验002&#xff1a;Elasticsearch介绍及单机安装 ElasticSearch (ES从入门到精通一篇就够了) 前言 警告&#xff1a;elasticsearch默认不允许使用root账号来运行的&#xff0c;所以&#xff0c;强烈建议一开始就创建一个账号例如&#xff1a;…