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.pyimport pytestclass 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 itemstest_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 pytestclass 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 itemstest_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 pytestclass 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 itemstest_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 pytestdef 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 pytestclass 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 itemstest_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 pytestclass 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 itemstest_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 pytestclass 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 itemstest_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 pytestdef 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 (后置执行顺序则相反)


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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS之隐式转换与布尔判定

大家思考一下 [ ] [ ] ? 答案是空字符串 为什么呢? 当做加法运算的时候,发现左右两端存在非原始类型,也就是引用类型对象,就会对对象做隐式类型转换 如何执行的?或者说怎么查找的? 第一步&…

IntelliJ IDE 插件开发 | (五)VFS 与编辑器

系列文章 IntelliJ IDE 插件开发 |(一)快速入门IntelliJ IDE 插件开发 |(二)UI 界面与数据持久化IntelliJ IDE 插件开发 |(三)消息通知与事件监听IntelliJ IDE 插件开发 |(四)来查收…

【GitHub项目推荐--不错的 React 开源项目】【转载】

用 React Flow 连接你的想法 用 React Flow 连接你的想法,这是一个高度可定制的库,基于 React 用于构建基于节点的 交互式 UI、编辑器、流程图和图表。 开源地址:https://github.com/wbkd/react-flow Bulletproof React 一个简单、可扩展且…

PyTorch深度学习实战(33)——条件生成对抗网络(Conditional Generative Adversarial Network, CGAN)

PyTorch深度学习实战(33)——条件生成对抗网络 0. 前言1. 条件生成对抗网络1.1 模型介绍1.2 模型与数据集分析 2. 实现条件生成对抗网络小结系列链接 0. 前言 条件生成对抗网络 (Conditional Generative Adversarial Network, CGAN) 是一种生成对抗网络…

IP报文格式(全网最详细)

IP报文格式 报文格式 图1 IP头格式 表1 IP头字段解释 字段长度含义Version4比特 4:表示为IPV4;6:表示为IPV6。IHL4比特首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项。…

AutoGen实战应用(二):多代理协作(Multi-Agent Collaboration)

AutoGen是微软推出的一个全新工具,它用来帮助开发者创建基于大语言模型(LLM)的复杂应用程序. AutoGen能让LLM在复杂工作流程启用多个角色代理来共同协作完成人类提出的任务。在我之前的一篇博客: AutoGen实战应用(一):代码生成、执行和调试 中我们通过一…

【RabbitMQ】交换机的概念及使用

一、引言 1、什么是交换机 RabbitMQ中,交换机是一个核心概念,主要用来将生产者生产出来的消息,传送到对应的队列中。实际上,生产者生产的消息从不会直接发送到队列,而是发送到交换机。交换机一方面接收来自生产者的消…

SpringBoot项目配置SSL后,WebSocket连接失败的解决方案

SpringBoot项目配置SSL后,WebSocket连接应使用wss协议,而不是ws协议。在前端配置WebSocket时,URL以wss://开头。

嵌入式学习第十二天

8.数组指针和指针数组(2): (1)指针数组: int *a[5]; char *str[5]; 指针数组主要用来操作字符串数组,通过将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作 二维数组主要用来存储字符串数组…

Nodejs前端学习Day3_准备工作

妈的,这几天真tm冷,前天上午还下了一整天的雪,大雪 文章目录 前言一、Node.js简介1.1何为1.2有什么 二、Node.js可以做什么三、学习路线四、下载nodejs4.1小坑记录4.2LTS和Current版本的不同 五、什么是终端六、在nodejs中执行js代码七、powe…

Kubernetes(K8S)各种攻击方法

1. 准备工作 1.1. metarget使用 项目地址(教程):https://github.com/Metarget/metarget/blob/master/README-zh.md 注意:推荐在Ubuntu 18.04(推荐)安装。 1.1.1. 安装metarget git clone https://github.com/Metarget/metarget.git cd metarget/ sudo apt install pyt…

[BUUCTF]-PWN:hitcon2014_stkof解析

又是一道堆题,先看保护 关键信息,64位,没开pie。再看ida 大致就是alloc创建堆块,free释放堆块,fill填充堆块内容,以及一个看起来没啥用的函数,当然我也没利用这个函数去解题 这里有两种解法 解…

【VB测绘程序设计】案例8——IF选择结构练习排序(附源代码)

【VB测绘程序设计】案例6——IF选择结构练习排序(附源代码) 文章目录 前言一、界面显示二、程序说明三、程序代码四、数据演示总结前言 本文主要掌握Val()函数转换,inputBox函数、IF条件句的练习,输入3个数,按大到小排序并打印。 一、界面显示 二、程序说明 利用inpu…

[BJDCTF2020]The mystery of ip

hint 猜测ip和XFF有关 加一个XFF 下面这一步是看了wp出来的:存在ssti 这里尝试用jinja的注入方法,页面回显了是php的smarty框架 查了一下smarty的注入方法,发现可以直接执行php命令 在根目录找到flag

RPC教程 6.负载均衡

1.负载均衡策略 假设有多个服务实例,而每个实例都提供相同的功能,为了提高整个系统的吞吐量,每个实例部署在不同的机器上。客户端可以选择任意一个实例进行调用,获取想要的结果。那如何选择呢?取决于负载均衡的策略。…

Visual Studio如何修改成英文版

1、打开 Visual Studio Installer 2、点击修改 3、找到语言包,选择需要的语言包,而后点击修改 4、等待下载 5、 安装完成后启动Visual Studio 6、在工具-->选项-->环境-->区域设置-->English并确定 7、重启 Visual Studio,配置…

数据结构与算法教程,数据结构C语言版教程!(第六部分、数据结构树,树存储结构详解)三

第六部分、数据结构树,树存储结构详解 数据结构的树存储结构,常用于存储逻辑关系为 "一对多" 的数据。 树存储结构中,最常用的还是二叉树,本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、…

QT实现USB摄像头接入显示

一、UVC协议简介 UVC全称是USB Video Class(USB视频类),是一种标准化的USB视频设备通信协议,它定义了摄像头与主机之间的数据传输协议和格式。 UVC协议的出现,解决了摄像头厂商之间互不兼容,以及摄像头应…

(二十八)ATP应用测试平台——使用electron集成vue3桌面应用程序

前言 Electron 是一个开源的框架,它允许使用 Web 技术(HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序。通过 Electron,开发者可以使用前端技术栈来创建具有原生应用程序体验的桌面应用。 Electron可以在 Windows、Mac 和 L…

【前端web入门第一天】02 HTML图片标签 超链接标签 音频标签 视频标签

文章目录: 1.HTML图片标签 1.1 图像标签-基本使用1.2 图像标签-属性1.3 路径 1.3.1 相对路径 1.3.2 绝对路径 2.超链接标签 3.音频标签 4.视频标签 1.HTML图片标签 1.1 图像标签-基本使用 作用:在网页中插入图片。 <img src"图片的URL">src用于指定图像…